Article image
Genildo Barros
Genildo Barros10/06/2024 13:32
Compartilhe

Framework Java: Conheça o Spring e o Poder do Spring Boot

  • #Java

Sem dúvidas, Spring é a “estação” do momento quando se fala em framework Java. Terminando, segundo o nosso glorioso Stack Overflow, como o quarto 'Framework mais amado' na pesquisa de desenvolvedores feita em 2019.

image

Mas, talvez, você esteja se perguntando:

“Como um Framework em JAVA conseguiu ser tão popular?”

Adentrando no extenso mundo do desenvolvimento, é notório o surgimento de Framework que visam descomplicar a criação e manutenção de diversos tipos de aplicações, cada vez mais completas e poderosas.

E nesse contexto, é que surge o Spring, um Framework de código aberto (open source), criado por Rod Johnson com o objetivo de tornar o processo de desenvolvimento mais prático, oferecendo uma solução simplificada e eficiente para os desenvolvedores.

O Spring é um dos Framework mais usados no universo Java, mas nem todo mundo entende como ele realmente funciona.

E, é diante de tal situação que venho explanar aqui para você, jovem desenvolvedor, os caminhos necessários para o entendimento do Spring Framework!

O que você irá ver neste artigo (Sumário):

1. Conheça o Spring Framework

   1.1 História do Spring Framework

1.2 O que é o Spring Framework

2. Estrutura do Spring: Visão Geral e Principais Módulos

   2.1 Visão Geral dos módulos

   2.2 Os Quatro Módulos do Spring Core

3. Família Spring: Principais Projetos

3.1 Visão geral, família Spring

3.2 Porque Spring Boot Framework?

4. Tutorial Prático com Spring Boot Framework:

4.1 Escolhendo a IDE

4.2 Iniciando um projeto Spring Boot

4.3 Estrutura básica

4.4 Criando endpoints REST

5. Resumo

6. Referências

Boa leitura!

1. Conheça o Spring Framework

image

Vou falar mais agora sobre o Spring. Este é um capítulo fundamental para quem nunca trabalhou com o Framework!

1.1 História do Spring Framework

O Spring surge em um contexto onde as aplicações javaEE eram extremamente problemáticas. Em 2003 é iniciado o desenvolvimento do Spring Framework e em 2004 é apresentado sua versão 1.0 ao público que tentou mitigar algumas das dificuldades encontradas pelos programadores na época, como:

  1. Escrever código era cada vez mais complexo, pois os desenvolvedores tinham que usar inúmeros arquivos XML e trabalhar com vários tipos diferentes de configurações.
  2. Os componentes eram extremamente frustrantes para trabalhar, já que os desenvolvedores tinham que codificar todas as dependências necessárias.
  3. Todos os recursos do Java EE precisavam ser configurados. Isso fazia com que o código ficasse “inchado” e difícil de desenvolver.

Estes eram os problemas que o Spring buscava solucionar inicialmente. Dessa forma, ele surge como um Framework crucial para simplificar complexidades de configuração e desenvolvimento de projetos java daquela época, mais precisamente, aplicações corporativas.

O Spring se destacou ao operar sem a necessidade de um servidor de aplicação, utilizando apenas a JVM e oferecendo recursos corporativos aos programadores. Ele simplificou arquiteturas, eliminando comportamentos desnecessários e promovendo uma abordagem modular e flexível baseada na inversão de controle e injeção de dependência.

1.2 O que é o Spring

image

Na imagem, temos uma tentativa bem repetitiva de explicar o Spring Framework. Embora essa seja uma descrição bem abrangente e, de uma forma, bem padronizada, pode ser um começo para entender as características do Spring Framework. Onde temos como características principais:

  • Inversão de Controle (IoC): é um princípio fundamental no Spring e, também em outros frameworks, onde é responsável por controlar o ciclo de vida de nossas aplicações;
  • Injeção de Dependência (DI): define quais classes iremos instanciar e em quais lugares iremos injetá-las, colocando de forma prática a inversão de controle;
  • Beans: os beans são os componentes fundamentais que formam a espinha dorsal de uma aplicação. Um bean é simplesmente um objeto que é instanciado, mantido e gerenciado pelo container Spring, também conhecido como ApplicationContext;
  • Contêiner: Podemos dizer portanto que o container é o elemento arquitetural de nossa aplicação, responsável por gerenciar o ciclo de vida dos componentes do nosso sistema. Um container pode ser intrusivo ou não e, no caso do Spring, temos um container com intrusividade mínima. Praticamente todas as funcionalidades do Framework são baseadas em seu container;
  • Programação Orientada a Aspectos (AOP): permite a separação de preocupações transversais, como logging, segurança e transações, do código de negócios principal. No Spring, AOP permite definir aspectos que podem ser aplicados em pontos específicos do código, conhecidos como join points, sem alterar o código base. Isso melhora a modularidade e facilita a manutenção do código.

A habilidade do Spring em controlar essa estrutura de maneira eficiente e intuitiva conquistou a comunidade Java!

Pois, o Spring Framework simplifica o desenvolvimento de aplicativos Java empresariais com IoC, DI e AOP. Ao usar servidores servlets leves, em vez de servidores completos, alcançando resultados similares. Oferecendo flexibilidade, modularidade e escalabilidade, simplificando configuração e implantação.

Depois de percorrer de uma forma mais abrangente todas essas características do Spring, podemos reformular a descrição levantada inicialmente, na imagem anterior. 

Segundo Henrique Lobo, no livro “Vire o jogo com Spring Framework”, todo framework é a aplicação da inversão de controle, então, dizer que o Spring se baseia neste princípio é puro pleonasmo.

Uma descrição mais esclarecedora do Spring seria considerá-lo um framework fundamentado na injeção de dependências, uma especialização da inversão de controle.

Na injeção de dependências, a classe cliente não precisa definir explicitamente suas dependências; essa responsabilidade é transferida para um contêiner específico de injeção de dependências. Agora sim!

image

2. Estrutura do Spring: Visão Geral e Principais Módulos

2.1 Visão Geral dos módulos

image

Existem vários módulos no Spring Framework que fornecem uma variedade de serviços.

Em sua versão básica, o Spring Framework é composto por seis módulos principais. Esses módulos fornecem a funcionalidade central do Framework e servem como a base para construir aplicações robustas e flexíveis. Os seis componentes principais do Spring são: 

  • “Core Container”: O Core Contêiner é o núcleo do Spring Framework e engloba as funcionalidades essenciais de Inversão de Controle (IoC) e Injeção de Dependências (DI). Ele fornece um ambiente para criação, configuração e gestão de objetos (beans), promovendo um design modular e flexível para aplicações Java;
  • “Data Access/Integration”: Este módulo aborda a integração de dados e sistemas externos com aplicações Spring. Ele oferece suporte para acesso a bancos de dados (JDBC, ORM), integração com sistemas de mensageria (JMS) e mapeamento objeto-relacional (OXM), simplificando a interação com diferentes fontes de dados;
  • “Web”: O módulo Web fornece suporte para o desenvolvimento de aplicações web usando o Spring Framework. Ele inclui funcionalidades para criação de controladores, tratamento de requisições HTTP, manipulação de formulários, gerenciamento de sessão e integração com tecnologias web populares;
  • “Test” :Este módulo facilita a escrita e execução de testes unitários e de integração para aplicações Spring. Ele oferece suporte para Framework de teste como JUnit e TestNG, além de fornecer funcionalidades específicas para testar componentes Spring, como mocks e configurações de contexto;
  • “AOP e Instrumentation”: AOP (Aspect-Oriented Programming) é uma técnica para separar preocupações transversais, como logging e segurança, do código de negócio principal. Este módulo do Spring oferece suporte para implementar aspectos de forma modular e transparente. Além disso, ele inclui funcionalidades para instrumentação de classes em tempo de execução, útil para monitoramento e depuração de aplicações;

2.2 Os Quatro Módulos do Spring Core

image

Todo o Framework Spring é baseado no Core Container. Ele estabelece a base para todas as outras funcionalidades do Spring, garantindo que os componentes da aplicação possam interagir de maneira harmoniosa e eficiente.

Podemos ver a seguir, de formas mais detalhada, quatro de seus componentes fundamentais: 

  • Core: Este é o módulo central que define o próprio container de IoC. Ele contém as interfaces e implementações básicas necessárias para gerenciar o ciclo de vida dos beans, suas dependências e interações. 
  • Bean: Usando como base o Core temos o módulo Beans, onde encontramos o BeanFactory, que implementa do factory. O factory é um padrão de projetos permite às classes delegar para suas subclasses decidirem quais objetos criar. Este padrão de projeto que torna desnecessária a codificação manual de singletons (Padrão que garante a existência de instância de apena uma classe) e nos permite o desacoplamento total do gerenciamento de dependências e ciclo de vida dos beans (Objeto de negócio) do código fonte através do mecanismo de configuração implementado neste módulo;
  • ContextS: temos o módulo Context, aonde se encontra a implementação mais avançada e comumente usada do container que é o ApplicationContext. O ApplicationContext é a interface central em um aplicativo Spring usado para fornecer informações de configuração ao aplicativo. Ele nos oferece recursos poderosos como por exemplo internacionalização, propagação de eventos, AOP, gerenciamento de recursos e acesso a funcionalidades básicas da plataforma Java EE;
  • Spring Expression Language (SpEL): O componente de Expression Languege é uma linguagem baseada em expressões que é utilizado como modo de configuração do Spring. Esta linguagem nos permite definir valores e comportamentos aos nossos beans definidos usando XML;

3. Família Spring: Principais Projetos

image

3.1 Visão geral, família Spring

É comum se surpreender ao descobrir a extensão da família Spring. O Spring Framework é um ecossistema de desenvolvimento Java que emprega uma variedade de módulos independentes, fornecendo soluções para todas as demandas de uma aplicação corporativa.

No início, o Spring Framework consolidava uma ampla gama de recursos em uma única plataforma. À medida que o projeto cresceu, alguns de seus recursos foram adotados por outros projetos. Isso levou à concepção da modularização de suas funcionalidades principais, visando facilitar a integração.

Com a implementação dessa modularização, o projeto Spring emergiu, composto por uma variedade de módulos, cada um com sua especialidade distinta. Atualmente, existem mais de 20 módulos/projetos Spring, e é crucial entender que cada um deles tem uma finalidade específica. Os principais são:

  • Spring Boot: Módulo do Spring que facilita a configuração e publicação das aplicações desenvolvidas, visando reduzir a quantidade de configurações iniciais que geralmente são fundamentais em projetos java;
  • Spring Data JPA: Módulo do Spring que visa facilitar a forma de acesso aos dados por parte da aplicação. Possui suporte desde o JDBC até o JPA;
  • Spring Security: Módulo do Spring responsável por gerenciar toda a parte de autenticação e autorização de uma aplicação;
  • Spring MVC: Permite a criação e desenvolvimento de aplicações utilizando o padrão MVC (Model-View-Controller); 
  • Spring Mobile: Facilita a criação de aplicações web que também serão executadas em dispositivos móveis.
  • Spring Cloud: módulo que fornece ferramentas para que os desenvolvedores criem rapidamente alguns dos padrões comuns em sistemas distribuídos
  • Spring Batch: módulo usado caso haja necessidade de criar muitos processos com horários agendado, permitindo o desenvolvimento de aplicativos de lote robustos.
  • Spring Web Services: facilita o desenvolvimento de serviços web SOAP, usando uma programação orientada a documentos;

3.2 Porque Spring boot?

image

O Spring Boot foi adicionado aos módulos do Spring Framework em 2014. Ele foi introduzido como uma ferramenta adicional para facilitar o desenvolvimento de aplicativos Spring, oferecendo convenções de configuração sensíveis e padrões de projeto pré-configurados para aceleração do desenvolvimento.

Sendo assim um fator determinante para que o uso do ecossistema Spring decolasse.

Grandes empresas como Netflix, Amazon, Microsoft e Google confiam no Spring Framework para suas infraestruturas de aplicativos. Pois, a modularidade e flexibilidade do Spring facilitam o desenvolvimento, manutenção e escalabilidade de seus sistemas.

No geral, ele fornece a maioria dos componentes necessários em aplicações de maneira pré-configurada, possibilitando uma aplicação rodando em produção rapidamente, com o esforço mínimo de configuração e implantação.

Algumas vantagens do Spring Boot Framework em relação ao Spring são as seguintes:

  • Configuração: O Spring Boot suporta autoconfiguração, onde o Framework configura automaticamente beans com base nas dependências jar disponíveis no classpath;
  • O Spring Boot é um framework opinativo: o que significa que ele possui suas próprias configurações padrão que podemos usar para construir rapidamente nossas aplicações. 
  • Starters: O Spring Boot vem com muitos starters, que são descritores de dependência pré-configurados com bibliotecas mais comumente usadas que podemos adicionar em nossa aplicação, como resultado, não precisamos procurar bibliotecas compatíveis e configurá-las manualmente. Alguns starters comuns são: spring-boot-starter, spring-boot-starter-web, spring-boot-starter-aop, spring-boot-starter-test.

image

4. Tutorial Prático com Spring Boot

image

Agora que você já foi introduzido ao mundo do Framework java com o ecossistema Spring, está na hora de colocar a mão na massa. Nesse sentido, preparei um tutorial rápido e prático para que você possa dar início ao desenvolvimento com Spring Boot, vamos nessa?

Pré-requisitos:

  • Conhecimentos básicos de Java;
  • Ambiente de desenvolvimento Java configurado (JDK);
  • IDE recomendada: IntelliJ IDEA, Eclipse, VS Code ou SpringSource Tools Suite;

4.1 Escolhendo a IDE

As IDEs mais populares, como Netbeans, Eclipse e JetBrains IDEA, oferecem suporte ao Spring por meio de plugins devido à sua grande popularidade. 

No entanto, o melhor suporte é fornecido pelo SpringSource Tool Suite (STS), uma distribuição personalizada do Eclipse desenvolvida pela equipe da SpringSource. O STS pode ser baixado clicando AQUI

Uma vez instalado, o STS já vem com todos os plugins necessários, permitindo que os desenvolvedores comecem a trabalhar imediatamente sem precisar se preocupar com a instalação de complementos em suas IDEs.

4.2 Iniciando um projeto Spring Boot

image

image

  • Acesse: https://start.spring.io/
  • Configurar as opções do projeto:
  1. Projeto: Maven
  2. Linguagem: Java
  3. Versão do Spring Boot: última versão estável
  4. Grupo: com.exemplo
  5. Artefato: meu-primeiro-projeto
  6. Nome do Projeto: meu-primeiro-projeto
  7. Descrição: Meu primeiro projeto Spring Boot
  8. Pacote Base: com.exemplo.meuprimeiroprojeto
  • Adicionar dependências:
  1. Spring Web
  2. Spring Boot DevTools (opcional, para desenvolvimento mais rápido)
  3. Spring Data JPA (para persistência de dados)
  4. H2 Database (para banco de dados em memória)
  • Baixar o projeto gerado como um arquivo .zip e descompactá-lo
  • Abrir a IDE (Netbeans, Eclipse e JetBrains IDEA ou SpringSource Tool Suite)
  • Importar o projeto Maven Spring Boot existente da pasta descompactada

4.3 Estrutura básica

Antes da configuração, vamos entender a estrutura da aplicação por meio de seus caminhos:

image

1. Arquivos Principais:

  • Classe principal com o método main para iniciar a aplicação: “src/main/java/com/exemplo/meuprimeiroprojeto/MeuPrimeiroProjetoApplication.java”
  • Arquivo de configuração da aplicação: “src/main/resources/application.properties”

2. Pacotes Comuns:

  • Controladores REST: ”com.exemplo.meuprimeiroprojeto.controller” (Necessário a criação);
  • Modelos de dados (Entidades JPA): “com.exemplo.meuprimeiroprojeto.model (Necessário a criação)

4.4 Criando endpoints REST

1. Criar um Controlador REST:

  • Crie o pacote controller: com.exemplo.meuprimeiroprojeto.controller:

image

  • Crie a Classe: HelloController:

image

Conteúdo da classe:

package com.exemplo.meuprimeiroprojeto.controller;


import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class HelloController {


  @GetMapping("/hello")
  public String hello() {
  	return "Hello, Spring Boot!";
  }
}

2. Executar a Aplicação: 

  • Executar a classe “MeuPrimeiroProjetoApplication” na IDE;
  • Acessar em seu navegador “http://localhost:8080/hello” no navegador para ver a mensagem "Hello, Spring Boot!";

image

Parabéns, agora você conseguiu dar os primeiros passos no desenvolvimento de aplicações Java com o Spring Boot!

Este guia fornece uma visão geral e prática para começar com Spring Boot Framework. Com o conhecimento adquirido, você pode explorar mais profundamente a vasta gama de funcionalidades oferecidas pelo Spring Framework.

Aproveite para experimentar e implementar novas funcionalidades em seus projetos, aprimorando suas habilidades e criando aplicações robustas e eficientes. Bons estudos!

5. Conclusão

Exploramos o Spring Framework e Spring Boot Framework, destacando sua importância no desenvolvimento Java, compreendendo sua estrutura, módulos e projetos relevantes. Aprendemos a iniciar um projeto Spring Boot e desenvolver endpoints REST. 

O futuro do Spring promete mais inovações, enquanto o aprendizado contínuo é crucial para acompanhar as mudanças tecnológicas e se tornar um desenvolvedor mais competente.

Para acompanhar o ritmo das mudanças tecnológicas, é crucial manter um compromisso com o aprendizado contínuo. Recomenda-se explorar novas funcionalidades do Spring, aprofundar-se em áreas específicas e manter-se atualizado com as últimas tendências do desenvolvimento de software.

Obrigado por ter chegado até aqui! #sucesso #java #frameworkjava #springframework

image

6. Referências

Almeida, A. Spring Framework: existem muitos, mas para que cada um serve? Site Medium. Disponível em: https://arthur-almeida.medium.com/spring-framework-existem-muitos-mas-para-que-cada-um-serve-b1773bcb69f0. Acesso em: 09 jun. 2024.

Borges, F. Spring Framework - Parte 1: Introdução. Site Medium. Disponível em: https://felipeborgesdev.medium.com/spring-framework-parte-1-introdu%C3%A7%C3%A3o-2affce628bd7. Acesso em: 07 jun. 2024.

Como começar com Spring. Site DevMedia. Disponível em: https://www.devmedia.com.br/exemplo/como-comecar-com-spring/73. Acesso em: 09 jun. 2024.

Difference between Spring and Spring Boot. Site GeeksforGeeks. Disponível em: https://www.geeksforgeeks.org/difference-between-spring-and-spring-boot/. Acesso em: 06 jun. 2024.

GeekHunter. Spring Framework. Site GeekHunter Blog. Disponível em: https://blog.geekhunter.com.br/spring-framework/. Acesso em: 08 jun. 2024.

GeekHunter. Tudo o que você precisa saber sobre o Spring Boot. Site GeekHunter Blog. Disponível em: https://blog.geekhunter.com.br/tudo-o-que-voce-precisa-saber-sobre-o-spring-boot/. Acesso em: 07 jun. 2024.

Giuliani, L. O Core do Spring. Site Medium. Disponível em: https://medium.com/@leonardogiuliani/o-core-do-spring-f3fe5e639772. Acesso em: 07 jun. 2024.

History of Spring Framework & Spring Boot Framework. Site DZone. Disponível em: https://dzone.com/articles/history-of-spring-framework-spring-boot-framework. Acesso em: 08 jun. 2024.

Introduction to Spring Framework. Site Medium. Disponível em: https://medium.com/@dipannitamahata/introduction-to-spring-framework-d5e5849b8247. Acesso em: 06 jun. 2024.

Mahata, D. O que é o Spring. Site Medium. Disponível em: https://vitormoschetti.medium.com/o-que-%C3%A9-o-spring-c672be3477b8. Acesso em: 09 jun. 2024.

O que é o Spring. Site TreinaWeb. Disponível em: https://www.treinaweb.com.br/blog/o-que-e-o-spring. Acesso em: 08 jun. 2024.

Rafadev, A. Injeção de Dependência: O que é e como usar. Site Medium. Disponível em: https://medium.com/@annarafadev/inje%C3%A7%C3%A3o-de-depend%C3%AAncia-o-que-%C3%A9-e-como-usar-7ec564b11b60. Acesso em: 06 jun. 2024.

Sobre Spring. Site Portal GSTI. Disponível em: https://www.portalgsti.com.br/spring/sobre/. Acesso em: 07 jun. 2024.

Spring. Site Xpand IT. Disponível em: https://www.xpand-it.com/spring/. Acesso em: 08 jun. 2024.

Spring 6.0 Benefits & Enhancements. Site InRhythm. Disponível em: https://www.inrhythm.com/spring-6-0-benefits-enhancements/. Acesso em: 06 jun. 2024.

Spring Boot. Site Spring. Disponível em: https://spring.io/projects/spring-boot. Acesso em: 09 jun. 2024.

Spring Framework Architecture. Site Amitph. Disponível em: https://www.amitph.com/spring-framework-architecture/. Acesso em: 09 jun. 2024.

Spring Framework Documentation. Site Spring Framework Documentation. Disponível em: https://docs.spring.io/spring-framework/reference/core.html. Acesso em: 07 jun. 2024.

Spring Framework Overview. Site Spring Framework Documentation. Disponível em: https://docs.spring.io/spring-framework/reference/overview.html. Acesso em: 08 jun. 2024.

Survey results. Site Stack Overflow. Disponível em: https://survey.stackoverflow.co/2019#technology. Acesso em: 09 jun. 2024.

Weissmann, H. L. Vire o jogo com Spring Framework. 2012.

What is the Purpose of Spring Framework? Site WebFrames. Disponível em: https://webframes.org/what-is-the-purpose-of-spring-framework/. Acesso em: 09 jun. 2024.

Compartilhe
Comentários (1)
Genildo Barros
Genildo Barros - 10/06/2024 14:01

Oi pessoal, fiz esse artigo com motivação da competição de artigos da dio #198 com a temática "FRAMEWORKS JAVA". Espero que tenha gostado. *gostaria de deixar claro para equipe que corrige o artigo uma coisa: preciso fazer uma alteração simples no titulo e introdução, mas a plataforma está me impossibilitando de editar o artigo e não tenho mais tempo para postar outro artigo. Porém, essa alteração seria no adicionamento do "s" no final da palavra "framework". Espero que a equipe entenda. :)