Um breve resumo do Spring e Spring Boot
- #Java
Os Frameworks são conjuntos de ferramentas e padrões para simplificar o desenvolvimento de software, agilizando o processo e garantindo consistência. Eles oferecem componentes prontos e boas práticas para construir aplicações de forma eficiente e organizada. O Spring é o framework mais popular usado em Java, o Spring Boot é uma extensão do Spring Framework que visa simplificar o processo de configuração e inicialização de aplicativos Spring. Neste artigo tentarei explicar de forma resumida como utilizar deste poderoso framework e seu projeto.
Veja os assuntos que serão abordados neste artigo:
- O que é o Spring
- Microserviços
- O que é o SpringBoot
- Build tools
- Inversão de Controle
- Injeção de Dependências
- A Injeção de Dependências no Spring
- Apache Maven
- Gradle
- Diferenças entre Gradle e Maven
- Como implementar o Spring/Springboot em uma aplicação Java
- Spring Initializr
- Downloads
O que é o Spring?
O Spring é um framework para desenvolvimento de aplicações em Java. Ele facilita a criação de aplicações robustas e de alta qualidade, ajudando os desenvolvedores a lidarem com a complexidade de grandes projetos.
Para entender melhor, imagine que você está construindo não apenas uma casa, mas todo um bairro. Você precisa de planejamento urbano, infraestrutura, serviços públicos e muito mais. O Spring fornece todas essas ferramentas e recursos para facilitar o desenvolvimento de aplicativos em grande escala. Ele ajuda a organizar e estruturar seu código de uma maneira mais eficiente, promovendo a modularidade, a reutilização e a manutenibilidade do código.
Além disso, o Spring incentiva práticas de desenvolvimento ágil e colaborativo, permitindo que equipes de desenvolvimento trabalhem de forma mais eficaz e produtiva. Com uma ampla gama de recursos e uma comunidade ativa de usuários e desenvolvedores.
O Spring oferece vários tipos de facilidades, como Spring Core, Spring MVC, Spring Data, Spring Cloud, o Spring Boot que vai ser o foco deste artigo, entre outros.
O Spring Core é a parte principal do Spring Framework, responsável por facilitar a criação de aplicações Java de forma organizada e flexível. Ele simplifica a gestão das dependências entre os objetos da aplicação, garantindo que eles sejam conectados de forma eficiente. Quando você utiliza o Spring Boot, o Spring Core já está incluído automaticamente como parte do framework.
Microsserviços
Microserviços são uma arquitetura de software onde cada serviço é responsável por uma parte do software de forma independente. Esses serviços são executados de forma autônoma e se comunicam entre si através de APIs. O Spring, com módulos como Spring Boot e Spring Cloud, fornece ferramentas para facilitar a criação e gerenciamento de microserviços.
O Spring Cloud é um conjunto de ferramentas que ajuda a criar e gerenciar sistemas distribuídos e microserviços.
O que é o SpringBoot?
Já o Spring Boot é uma extensão do Spring Framework que visa simplificar o processo de configuração e desenvolvimento de aplicativos Java. Ele fornece um conjunto de padrões e convenções predefinidos para ajudar os desenvolvedores a começarem rapidamente sem a necessidade de configurar manualmente muitos aspectos da aplicação.
Se pensarmos na analogia da construção de uma casa, o Spring Boot seria como uma equipe de arquitetos e construtores experientes que já têm um plano pré-definido e todas as ferramentas necessárias para construir uma casa de forma rápida e eficiente. Ele automatiza muitas tarefas comuns, como configuração de servidor, gerenciamento de dependências e inicialização de aplicativos, permitindo que os desenvolvedores se concentrem mais na lógica de negócios da aplicação. Em resumo, o Spring Boot simplifica o desenvolvimento de aplicativos Spring, reduzindo o tempo e a complexidade associados à configuração manual.
Build tools
As build tools, ou ferramentas de construção traduzido são programas utilizados para automatizar o processo de compilação, teste e empacotamento de projetos de Java. Elas ajudam os desenvolvedores a gerenciarem as dependências do projeto, compilar o código-fonte, executar testes automatizados, gerar artefatos (como arquivos JAR ou WAR) e realizar outras tarefas relacionadas à construção do software. Essas ferramentas de construção ajudam os desenvolvedores a padronizar e automatizar o processo de desenvolvimento de software, tornando-o mais eficiente, confiável e repetível.
Alguma das ferramentas mais utilizadas: Apache Maven, Gradle e Ant.
A escolha de qual ferramenta usar, vai depender do projeto e como pretende usar, cada uma delas tem suas vantagens e desvantagens, não falarei de todas, porem tentarei resumir as duas ferramentas mais conhecidas, o objetivo das ferramentas é fazer o desenvolvedor economizar tempo e com isso ganhar mais eficiência na hora de programar, por isso a escolha varia conforme o projeto e a familiaridade do programador.
Inversão de Controle
A Inversão de Controle (IoC) é um princípio de design de software onde o controle sobre a execução de determinadas tarefas é invertido. Em vez de você controlar diretamente a execução do programa, ele delega essa responsabilidade a um framework ou contêiner. Isso significa que em vez de você controlar diretamente como os objetos são criados e usados, o Spring faz isso por você.
Injeção de Dependências
Injeção de Dependência é receber o que precisa em vez de fazer você mesmo. No Spring, isso significa que o Spring cuida de fornecer automaticamente o que sua aplicação precisa, como objetos ou serviços. Funciona assim: você diz ao Spring o que sua aplicação precisa, e o Spring cuida de encontrar e fornecer essas coisas automaticamente. Isso facilita o desenvolvimento, pois você não precisa gerenciar manualmente as dependências, tornando o código mais simples e organizado.
Imagine que você precisa escrever uma redação, e para isso você precisa de uma caneta, em vez de você mesmo fazer a caneta, alguém te entrega uma, isso seria uma Injeção de Dependência: em vez de criar suas próprias coisas, você recebe o que precisa para poder escrever seus códigos.
A Injeção de Dependências no Spring
O Spring gerencia automaticamente a localização, criação e injeção das dependências declaradas, simplificando o desenvolvimento e garantindo que os objetos necessários estejam disponíveis quando necessário.
Primeiro você declara as dependências necessárias nos seus componentes (classes) através de anotações ou configurações, então quando sua aplicação é inicializada, o Spring localiza as dependências necessárias com base nas configurações fornecidas e as cria conforme necessário, assim, uma vez que as dependências são injetadas nos seus componentes, você pode utilizá-las normalmente dentro da sua aplicação.
Apache Maven
O Apache Maven é uma ferramenta de automação de compilação amplamente utilizada no desenvolvimento de software Java. Ele simplifica e gerencia o processo de compilação, teste e empacotamento de um projeto Java.
Ele encontra e organiza as "peças" necessárias para o projeto (chamadas de dependências), seguindo receitas padrão. Com o Maven, os desenvolvedores podem criar projetos Java sem se preocupar muito com a parte de configurar tudo manualmente. Ele automatiza tarefas de construção e gerenciamento de projetos Java, facilitando o trabalho dos desenvolvedores.
Gradle
Similar ao Maven, o Gradle também é uma ferramenta de automação de compilação amplamente utilizada no desenvolvimento de software Java. Ele funciona a baseado em plugins, ou seja, além dos já existentes, você também pode criar scripts próprios para uso no Gradle.
A própria Google utiliza do Gradle em seus projetos.
Diferenças entre Gradle e Maven
Por serem similares e terem praticamente o mesmo proposito, ambas podem acabar sendo confundidas, porém cada uma trabalha de um jeito diferente.
- Linguagem de Configuração:
- Maven: Utiliza XML para configurar projetos. Embora seja amplamente adotado, o XML pode parecer mais verboso e menos intuitivo para algumas pessoas.
- Gradle: Usa Groovy para escrever scripts de build, que é mais expressiva e fácil de entender para muitas pessoas.
- Desempenho:
- Maven: Usando o XML, ele pode levar tempos maiores de compilação para projetos grandes.
- Gradle: A abordagem DSL faz com que o código seja menor, além de um mecanismo de cache, gerando uma execução mais rápida.
Comparação de Código:
Maven:
Fonte: Pedro Pietroluongo (dev.to: Comparação Entre Apache Maven e Gradle)
Gradle:
Fonte: Pedro Pietroluongo (dev.to: Comparação Entre Apache Maven e Gradle)
Como implementar o Spring/Springboot em uma aplicação Java
Configuração do Ambiente de Desenvolvimento
Certifique-se de ter o Java Development Kit (JDK) instalado em seu sistema.
Configuração do Gerenciador de Dependências
Você pode usar uma ferramenta de gerenciamento de dependências como o Maven ou o Gradle para configurar seu projeto Java e gerenciar as dependências do Spring ou do SpringBoot. O Maven é o gerenciador que mais usei, é como um organizador que ajuda os desenvolvedores a criar e gerenciar projetos Java de forma fácil. Ele encontra e organiza as "peças" necessárias para o projeto (chamadas de dependências), seguindo receitas padrão. Com o Maven, os desenvolvedores podem criar projetos Java sem se preocupar muito com a parte de configurar tudo manualmente. Ele basicamente automatiza tarefas de construção e gerenciamento de projetos Java.
Adicionar Dependências
Se estiver usando o Maven, adicione as dependências do Spring ou do Spring Boot ao arquivo pom.xml. Se estiver usando o Gradle, adicione as dependências ao arquivo build.gradle.
Spring Initializr
O Spring Initializr é uma plataforma que oferece uma configuração e criação inicial do seu projeto de forma mais rápida e gerando automaticamente toda a estrutura do seu projeto. Acessível via: https://start.spring.io/
Você consegue configurar como quer seu projeto e já deixar as dependecias configuradas de acordo com que vai usar, e se necessário, atualizar o projeto com novas dependências, sem a necessidade de procurar na Web pelas dependências manualmente.
- Projeto: Escolha a ferramenta que melhor se encaixa no seu projeto, ou que você mais gosta. Gradle Groovy - Gradle Kotlin - Maven
- Linguagem de programação: Aqui você pode selecionar em qual linguagem vai ser feito o projeto. Java - Kotlin - Groovy
- Versão do Spring Boot: Aqui, você pode escolher a versão do Spring Boot dentre as disponiveis.
- Group: Um identificador único para o seu projeto, como as package. Seguindo o formato de nome de domínio invertido. Se você tem um domínio exemplo.com, o grupo seria com.exemplo.
- Artifact: É o nome do arquivo de empacotamento, escrito em letras minúsculas e sem caracteres especiais. Pode ser um JAR (arquivo Java) ou um WAR (arquivo ou recurso de aplicativo web). Exemplo: demo.
- Name: O nome que será atribuído ao seu projeto automaticamente com base no nome do artefato.
- Description: Um resumo breve do que seu projeto faz.
- Package name: Combinação do nome do grupo e do artefato. Exemplo: com.exemplo.demo
- Packaging: Define se seu projeto será empacotado como um JAR ou WAR.
- Java: A versão do Java que o seu projeto irá usar dentre as disponibilizadas.
- Dependencies: Aqui você consegue ir adicionando as dependências sem precisar procurá-las na web.
- Add Dependencies: Local de busca das dependências, você consegue selecionar múltiplas dependências adicionando todas juntas.
- Remover Dependencies: Caso você tenha colocado alguma dependência a mais, é possível apenas remove-la.
- Generate: Clicando neste botão, o seu projeto é baixado localmente em seu computador, para que você possa começar a programar na sua IDE de preferência.
- Explore: Você consegue navegar pelo código antes de baixar, podendo ver como vai ficar o esqueleto inicial e confirmando se esta tudo certo para baixar.
- Share: Voce consegue compartilhar sua configuração copiando o link pelo botão Share.
Conclusão
Existem diversos framework para diversos tipos de projetos, com o Spring, o desenvolvedor consegue uma gama maior de possibilidades de poder desenvolver seus projetos de forma mais rápida, otimizando grande parte das redundâncias, simplificando o desenvolvimento, promovendo boas práticas, e oferecendo um ecossistema abrangente de funcionalidades e recursos de alta qualidade.
O Spring é uma escolha sólida para desenvolvedores que buscam produtividade, flexibilidade e qualidade em seus projetos, podendo ajudar em vários tipos de projetos, seja local, ou e nuvem.
Downloads
Java Development Kit (JDK): https://www.oracle.com/br/java/technologies/downloads/
Maven: https://maven.apache.org/install.html
Gradle: https://gradle.org/install/
Referências
Spring. Spring Framework Documentation. Disponível em: <https://docs.spring.io/spring-framework/reference/index.html>
Azure. O que é o Java Spring Boot? Disponivel em: <https://azure.microsoft.com/pt-br/resources/cloud-computing-dictionary/what-is-java-spring-boot>
Dev. Microsserviços com Spring Cloud: Introdução. Disponivel e: < https://dev.to/womakerscode/microsservicos-com-spring-cloud-introducao-3cn6>
Techtarget. Oque é Spring. Disponível em: <https://www.techtarget.com/searchapparchitecture/definition/Spring-Framework>
Devmedia. Como começar com Spring? Disponível em: <https://www.devmedia.com.br/exemplo/como-comecar-com-spring/73>.
Medium. Porque você deve usar Spring Boot. Disponível em: <https://medium.com/@duduxss3/porque-voc%C3%AA-deve-usar-spring-boot-a22f75da0955>
Medium. Entenda o que são build tools do mundo Java. Disponivel em: < https://medium.com/@alex.felipe/entenda-o-que-s%C3%A3o-build-tools-do-mundo-java-682a26e38ff2 >
Hnz. Gradle: saiba o que é e como utilizar. Disponivel em: < https://hnz.com.br/gradle-saiba-o-que-e-e-como-utilizar/>
Dev. Comparação Entre Apache Maven e Gradle. Disponível em: <https://dev.to/pedropietro/comparacao-entre-apache-maven-e-gradle-81h>
Raffaelbrandao. Iniciando um novo projeto Spring Boot no Spring initializr. Disponivel em: <https://blog.raffaelbrandao.com/iniciando-projeto-spring-boot-no-spring-initializr/>