As Frameworks Spring e Spring Boot
Tags: springboot, spring, java
Published: 2024-01-05 19:05:01

## Entendendo as diferenças e utilidades de Spring e Spring Boot

Ao tratar de linguagens de programação com propósitos generalizados, estamos englobando um universo de recursos incluídos em uma única plataforma, é o caso do Java. Trabalhar com programação em Java permite lidar com uma gama de opções e funcionalidades para o desenvolvimento das mais diversas aplicações. Contudo, o mercado possui demandas comuns que são repetidas em vários produtos.

Nesse contexto, projetos começam a possuir um modelo relativamente repetido, que possui vários requisitos similares. Quanto maior o projeto, mais especificações, especialmente de segurança, são necessárias, e a configuração e produção do mesmo se torna cansativa. Assim encontramos soluções em frameworks, que trazem em si os elementos repetidos já pré-configurados e prontos para desenvolvimento.

Por esse motivo, houve busca por estruturas e ferramentas de programação que tragam maior produtividade aos desenvolvedores de software e às corporações. Mais especificamente, a busca por soluções para o desenvolvimento em Java gerou diversas iniciativas, principalmente no universo de aplicações web. Nesse contexto que frameworks como Spring e Spring Boot surgiram.

Soluções de baixo custo, versatilidade, segurança e alta demanda, essas frameworks são comumente usadas no mercado. O trabalho de configuração generalista e complexo se torna um peso a menos na vida do programador e passa a ser resolvido por essas ferramentas.

Como um desenvolvedor de software Java, é importante entender essas diferentes ferramentas e suas aplicações no mercado atual, principalmente porque grandes empresas como Udemy, Ifood e MercadoLivre já reportaram que utilizam-nas em seus sistemas.

## Spring
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gcly46ood2v3s23esr3w.png)
Spring Framework é uma ferramenta de aplicação open-source para a plataforma Java. Os seus recursos principais, como a inversão de controle, podem ser usados por qualquer aplicação, sendo que há inúmeras extensões para a criação em web sobre a plataforma Java EE. Mesmo que a framework não exija nenhum modelo de programação, ela se tornou muito popular como adição ao modelo EJB (Enterprise JavaBeans) na comunidade de desenvolvedores.

Como mencionado acima, é uma framework open-source, ou seja, livre para distribuição e modificação dos usuários. Seu objetivo é simplificar o desenvolvimento de  aplicações Java corporativas, assim como programação leve com Java POJOs (Plain Old Java Objects), minimizar código boilerplate* com classes assistentes. Além disso, ela também promove a utilização de injeção de dependência para vinculação fraca (loose coupling*) entre seus componentes.

Spring oferece uma variada gama de recursos para melhorar a produtividade do programador em sua infraestrutura, separando-se em módulos. Alguns exemplos que incluem as principais funcionalidades que um projeto requer são: Spring MVC, Spring Security, Spring Test, entre outros. Cada um deles permite uma produção mais eficiente e robusta para aplicações, considerando os padrões da indústria.

Podemos identificar vários benefícios na implementação de Spring, especialmente pelo fato de que pode ser usado em todas as camadas de desenvolvimento de uma aplicação. Já mencionado anteriormente, é uma opção leve para produção robusta. Além disso, é uma opção para desenvolvimento escalável, como no caso de microsserviços.

Apesar de suas features trazerem grande mudança no mercado de desenvolvimento de software, ainda assim o Spring sofreu muitas críticas principalmente com relação ao modo como se configura seu container utilizando arquivos XML, que se tornavam cada vez mais difíceis de serem mantidos conforme a aplicação aumentava. Além disso, a gestão de dependências também foi alvo de reclamações por sua complexidade, algo que piorou com o tempo, já que a programação de aplicações também tem se tornado mais complexa.

Boilerplate = termo usado para descrever código que deve ser repetido diversas vezes
Loose Coupling = quando partes do sistema funcionam independentes entre si

## Spring Boot
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yt6gb54rl67a149xd317.png)
Então chegamos ao Spring Boot, que veio juntamente com a crescente demanda no mercado por uma opção de simples implementação e produção. Enquanto Spring se tornava cada vez mais complexo, gerando dificuldade na criação de aplicações baseadas nele, o Spring Boot veio para oferecer setup simples e pré-configurado.

Spring Boot é um micro framework mantida pela Pivotal, uma empresa americana  multinacional de software e serviços fundada em 2013. A ideia por trás dessa ferramenta é aproveitar as tecnologias já existentes para aumentar a produtividade dos desenvolvedores. A mudança agora está na forma como se configura, organiza e executa o código das aplicações, como mencionado acima, trazendo uma solução para as críticas feitas anteriormente ao Spring 4.0.

Alguns de seus principais recursos: Flexibilização na configuração de Java Beans, arquivos XML e transações da base de dados; Sem configurações manuais, tudo é auto-configurado pelo próprio Spring Boot; Aplicações baseadas em annotations; Facilita o gerenciamento de dependências.

Basicamente, sua arquitetura pode ser explicada como uma fina camada que se sobrepõe em tecnologias e ferramentas já estabelecidas e consagradas no mercado, com a diferença principal sendo no modo como se acessa e configura essas soluções. A intenção por trás do Spring Boot é minimizar o código e torná-lo o mais simples possível.

Porém, assim como Spring, ainda há diversos problemas envolvidos na produção com Spring Boot. Como tudo é pré-configurado, há um menor controle, além de uma quantidade de dependências não usadas que geram um arquivo grande. Além disso, não é considerada uma boa ferramenta para criação de aplicações em larga-escala (apesar de ser muito usada para desenvolvimento de microsserviços).

## Conclusão

Ambas são ferramentas utilizadas no mercado que trazem uma série de benefícios para um desenvolvedor Java. Spring é leve e auxilia na produção de código com boas práticas. Spring Boot é autoconfigurado e possui padrões intuitivos, aumentando a velocidade de programação e simplificando o código.

Considerando isso, atualmente a prática comum é aplicar as duas em conjunto. Dificilmente será vantajoso utilizar Spring em sua essência. Apesar das configurações do Spring Boot vir acompanhado de várias dependências desnecessárias, ainda é uma opção viável na maioria dos casos.