O que é Spring Boot e como dar os seus primeiros passos

O que é Spring Boot e como dar os seus primeiros passos
Armano Barros Alves Junior
Armano Barros Alves Junior

Compartilhe

A criação de aplicações robustas, escaláveis e fáceis de manter é um desafio constante.

Nesse contexto, o Spring Boot surge como uma ferramenta revolucionária, simplificando o processo de desenvolvimento de aplicações Java.

Isso porque ele permite que a pessoa desenvolvedora se concentre na lógica de negócios, em vez de configurações complexas, já que traz implementações embutidas para aumentar a produtividade no desenvolvimento.

Com ele, você pode criar APIs para listar, cadastrar, atualizar e deletar os dados da sua aplicação, além de integrar diferentes sistemas, desenvolver microsserviços e muito mais.

Neste artigo, mergulharemos no universo do Spring Boot. Exploraremos sua essência, funcionalidades, componentes principais e qual é a diferença dele para o Spring tradicional.

Além disso, você dará os primeiros passos para criar e executar sua primeira aplicação Spring Boot.

O que é Spring Boot?

Spring Boot é um projeto da Spring Source que teve seu lançamento em 2014 como uma ferramente de Software Livre, o que significa que ele é mantido de maneira colaborativa, com o código disponível para todas as pessoas que quiserem usar ou indicar alterações.

Seu nascimento veio da necessidade de deixar o desenvolvimento de aplicações Spring mais simplificado. Sendo assim, para entendermos melhor sobre o Spring Boot, é importante compará-lo com seu predecessor, o Spring Framework.

Este é um framework para desenvolvimento de aplicações Java que fornece recursos como Inversão de Controle (IoC), injeção de dependências, container Spring, entre outros. Porém, para usar essa ferramenta precisamos de uma configuração manual detalhada.

Neste ponto o Spring Boot se destaca, pois surge como uma extensão do Spring Framework que simplifica o processo de configuração e desenvolvimento, oferecendo configuração automática, starters de dependências e servidores embutidos.

Isso permite criar aplicações rapidamente exigindo o mínimo de configuração por parte de quem trabalha no projeto.

Pensando na essência do Spring Boot, podemos elencar os 3 principais recursos dele:

  • Autoconfiguração: aplicações Spring Boot, quando inicializadas, apresentam dependências predefinidas, evitando configurações manuais. Assim, elas realizam a configuração automática de todo o ecossistema Spring do projeto, reduzindo erros humanos e acelerando o desenvolvimento.

  • Abordagem opinativa: o Spring Boot seleciona e configura dependências com base nas necessidades do projeto, utilizando os chamados Spring Starters, que nada mais são que pacotes pré-configurados que já vem com a dependência ao ser instalada.

Mais de 30 Spring Starters estão disponíveis, cobrindo diversos casos de uso com configurações padrão. Vão de configurações de banco de dados até a parte de segurança da aplicação.

  • Aplicativos independentes: é possível criar aplicativos autônomos, que podem ser executados sem um servidor web externo, integrando um servidor da web durante o processo de inicialização.

Exemplos de tais aplicativos são o Tomcat, Jetty, ou o Undertow.

Como resultado, a inicialização do aplicativo é feita em qualquer plataforma ao simplesmente ser executada.

Banner promocional da Alura, com um design futurista em tons de azul, apresentando dois blocos de texto, no qual o bloco esquerdo tem os dizeres:

Para que serve e por que usar o Spring Boot?

O Spring Boot serve para diversos propósitos, tendo como objetivo principal simplificar o desenvolvimento de aplicações baseadas em Spring.

Ele não está restrito a apenas uma forma de uso, então vamos conferir os benefícios que o Spring Boot nos disponibiliza.

Principais usos

  • APIs RESTful: com elas criamos serviços REST que lidam com operações CRUD (Create, Read, Update, Delete) em dados armazenados em bancos de dados.

  • Arquitetura de Microsserviços: por sua vez, criam um sistema no qual cada funcionalidade (como autenticação, gestão de usuários, etc.) é um serviço separado, facilitando a manutenção e escalabilidade.

  • Aplicações empresariais: tipo de aplicações que focam na gestão empresarial, conhecidas como Enterprise resource planning (ERPs), em tradução livre, "Sistema integrado de gestão empresarial". São geralmente aplicados em sistemas bancários, e-commerce, entre outros.

Benefícios

  • Por possuir a configuração simplificada, eliminamos a necessidade de configurações XML extensivas.

  • Fornece "starters" que simplificam a configuração de gerenciadores de bibliotecas Maven ou Gradle.

  • Fornece anotações que simplificam a escrita de testes unitários e de integração.

  • Suporta uma gama de integrações com outras tecnologias e frameworks.

Como funciona o Spring Boot

Antes de falarmos sobre o Spring Boot, é de grande importância pontuar sobre o funcionamento do Spring Framework, já que ele envolve todo o ecossistema da aplicação.

  1. Inversão de controle (IoC): esse é um princípio em que a criação e gestão de controle é delegada a um container Spring, tirando essa responsabilidade do código da aplicação.

Como isso funciona? Sem a utilização do ecossistema Spring, o código Java cria e gerencia todos os objetos e instâncias, sem falar de suas dependências.

No Spring, o container cuidará desse gerenciamento, declarando e instanciando objetos caso julgue necessário.

  1. Injeção de dependências: é uma técnica presente no IoC que permite a um objeto receber suas dependências de forma externa, em vez de criá-las internamente.

Por exemplo: sem o Spring, você precisaria estabelecer a propriedade e instanciar a classe para essa propriedade.

java
public class Usuario {
  private Repositorio repositorio;

  public Usuario() {
      this.repositorio = new Repositorio(); // Criação manual da dependência
  }
}

No exemplo acima, a classe Usuario cria uma instância de Repositorio dentro de seu construtor.

Então, caso você precise mudar essa implementação do Repositorio ou adicionar novas dependências vindas de outras classes, seria necessário alterar manualmente várias partes do código.

Com o Spring, todo esse processo é simplificado, já que ele é responsável por essa parte de criação e injeção de dependências.

java
@Controller
public class Usuario {

  @Autowired
  private Repositorio repositorio;
}
  1. Container Spring: é a peça central de todo o Spring Framework. Ele segue a analogia de um gerente que cria os objetos ou beans necessários para sua aplicação e gerencia a vida útil desses objetos.

Ele sabe quando criar, configurar e destruir objetos, garantindo que tudo funcione como o esperado.

Além disso, faz a injeção de dependências, fornecendo as necessárias para cada objeto. Isso facilita a integração entre diferentes partes da aplicação.

Voltando para o Spring Boot, seu funcionamento pode ser entendido melhor ao analisarmos seus principais componentes e como eles interagem.

Funcionamento do SpringApplication e o processo de inicialização

O ponto de partida de qualquer aplicação Spring é a classe que contém o método main. Dentro desse método chamamos o SpringApplication.run(), que inicia toda a aplicação.

Contudo, o que exatamente o SpringApplication faz? Primeiramente, ele cria o contexto em que a aplicação funcionará e todos os beans e componentes do Spring serão gerenciados e injetados conforme necessário.

Também aplica uma varredura nos componentes por meio da anotação @ComponentScan, responsável por buscar classes que receberam anotações como: @Component, @Service, @Repository, entre outras.

Tal busca é feita em todos os arquivos e pastas da aplicação.

Por fim, ele configura o ambiente, carregando propriedades definidas em arquivos como applications.properties ou application.yml, configurando assim comportamentos ou variáveis do ambiente para toda a aplicação.

Funcionalidade de autoconfiguração

O Spring Boot automatiza a configuração dos componentes Spring tendo como base as dependências instaladas. Por exemplo, se adicionarmos a dependência spring-boot-stater-data-jpa em nosso projeto, ele carrega configurações já estabelecidas nessa dependência, configurando um DataSource e um EntityManageFactory.

Exemplo:

java
@Entity
public class Usuario {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nome;
    // getters e setters
}

Com a dependência spring-boot-starter-data-jpa, você pode criar um repositório que faz o acesso e as alterações necessárias em uma tabela do banco de dados para essa entidade. Isso sem precisar configurar manualmente o JPA.

public interface UserRepository extends JpaRepository<Usuario, Long> {
}

Isso é possível porque a interface JpaRepository traz consigo todas as configurações necessárias para que o seu repositório funcione e já venha com alguns métodos padrão implementados.

Para obter a interface, precisamos dizer a classe, no caso Usuario, e o tipo do id da classe, que é Long.

Pacotes starters

Os chamados starters são pacotes que agrupam dependências comuns entre si para casos de uso específico. Adicionando um Starter, você incluirá todas as bibliotecas necessárias para aquela funcionalidade.

Exemplo: Se quisermos desenvolver uma API RESTful, não é necessário baixar vários pacotes e bibliotecas separadamente, basta adicionar o spring-boot-starter-web no arquivo de dependências, o pom.xml.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Ao fazer isso, teremos tudo configurado para criar controladores e expor endpoints REST, já que o Spring Boot carrega as configurações que vem juntamente com todo esse pacote.

Preparando o ambiente para começar em Spring Boot

Para começar um projeto Spring Boot é necessário ter instaladas algumas ferramentas:

  • Java JDK (Java Development Kit): inclui um conjunto de utilitários, como o interpretador Java, as classes Java e as ferramentas de desenvolvimento Java: compilador, depurador, entre outros.

Além disso, há a ferramenta responsável por traduzir os códigos para o computador.

As suas versões atuais, estão disponíveis para download gratuitamente na página da Oracle, mantenedora dessa ferramenta.

  • IDE IntelliJ: está disponível em múltiplas plataformas, como o Windows, Linux e Mac.

Sua versão Community é disponibilizada gratuitamente e com ela não é necessário aplicar nenhuma configuração para iniciar um projeto Spring.

  • IDE Visual Studio Code: não muito diferentemente do IntelliJ, está disponível em múltiplas plataformas. Porém, necessita de um conjunto de configurações para conseguir desenvolver um projeto Spring.

Você pode acompanhar todos os passos da configuração no artigo Desenvolvendo aplicações Java com o VS Code

Como criar um projeto Spring Boot

O jeito mais fácil de iniciar um projeto Spring Boot é usar o Spring Initializr. Esta ferramenta web permite que você configure um projeto Spring Boot com as dependências desejadas.

Captura de tela que mostra o ambiente de inicialização de um projeto Spring, com sessões para selecionar o gerenciador do projeto, linguagem, versão e metadados.

A captura de tela acima mostra o ambiente do Spring Initializr e podemos notar várias sessões, sendo elas:

  • Project: responsável por definir qual ferramenta será o gerenciador de dependências do projeto, Maven, Gradle - Groovy ou Gradle - Kotlin.

  • Language: seleção da linguagem que irá estruturar todo o projeto Spring.

  • Spring Boot: escolha da versão do Spring Boot utilizada no projeto. A versão que vem marcada por padrão é a indicada para ser usada, por ser estável.

  • Project Metadata: sessão onde são definidas informações como grupo, nome e descrição do projeto. Ao preencher essas informações, será estabelecida a raiz do projeto em uma pasta com o mesmo nome dele.

  • Dependencies: aqui são selecionadas as dependências necessárias para o projeto. Não há um número limite de dependências a ser selecionadas, mas use apenas o necessário.

Ao finalizar todas as configurações, precisaremos clicar na opção "GENERATE", que está no canto inferior central ou pressionar as teclas "CTRL + ENTER".

Dessa forma, será gerado um arquivo compactado com toda a estrutura do projeto, então bastará descompactá-lo e abri-lo usando a sua IDE de escolha para começar o projeto.

Módulos do Spring Boot

O Spring Boot tem vários módulos, cada um focado em um aspecto específico do desenvolvimento de aplicações. Abaixo veremos alguns dos módulos mais comuns e algumas de suas características.

Spring Data

O Spring Data é responsável por simplificar o acesso a diferentes tipos de bancos de dados, sejam eles relacionais ou não. Ele fornece uma camada de abstração para você trabalhar com seus dados de forma consistente, o que não restringe a escolha do banco de dados.

Exemplo: configuração básica de um repositório que possibilita a implementação de métodos de busca personalizados ou padrões ao banco de dados.

public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByLastName(String lastName);
}

Spring Security

Um módulo poderoso e crucial no quesito segurança. Ele fornece autenticação, autorização e proteção contra ataques comuns como CSRF e XSS. É altamente configurável, permitindo desde a autenticação simples com formulários até OAuth2 e SSO.

Exemplo: configuração básica para proteger todas as URLs, exceto a de login:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    return http.csrf(csrf -> csrf.disable()).sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
            .authorizeHttpRequests(req -> {
                req.requestMatchers("/login").permitAll();
                req.anyRequest().authenticated();
            })
            .build();
}

Spring Cloud

Já esse módulo é utilizado para construir sistemas distribuídos e microsserviços. Ele fornece ferramentas para configuração distribuída, descoberta de serviços, gerenciamento de circuitos e muito mais, integrando-se com outras tecnologias como Netflix OSS e Kubernetes.

Exemplo: é mais complicado de implementar, mas utilizando a dependência do Eureka Server e aplicando algumas configurações no application.properties é possível ter um projeto base.

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
server.port=8081

spring.application.name=server
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

Spring Core

Pode ser considerado o núcleo do framework Spring, contendo funcionalidades fundamentais como IoC e injeção de dependências. Ele permite que objetos sejam gerenciados e configurados pelo container Spring, promovendo um design modular e flexível.

Exemplo: um bean definido e injetado automaticamente:

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

//injeção aplicada em outra classe
@Autowired
private MyService myService;

Spring MVC

O Spring MVC é o módulo que facilita o desenvolvimento de aplicações web em Java, seguindo o padrão Model-View-Controller. Ele oferece uma forma estruturada de criar APIs RESTful e aplicações web tradicionais, integrando-se facilmente com templates e JSON.

Exemplo: controlador básico que mapeia uma requisição GET:

@Controller
public class MyController {
    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "Hello, World!");
        return "hello";
    }
}

Conclusão

Como você pôde ver, o Spring Boot se destaca como uma ferramenta essencial para o desenvolvimento de aplicações Java, oferecendo uma abordagem simplificada e eficiente.

Ao automatizar a configuração e fornecer um ambiente de desenvolvimento mais enxuto, permite que as pessoas desenvolvedoras concentrem seus esforços na lógica de negócios e na criação de soluções.

Além disso, sua capacidade de integrar facilmente diferentes tecnologias e frameworks amplia as possibilidades de uso, desde a construção de APIs RESTful até a implementação de arquiteturas de microsserviços e aplicações empresariais.

Depois de tudo que discutimos ao longo deste artigo, fica claro que o Spring Boot não só facilita o desenvolvimento, mas também promove boas práticas de código, tornando-se uma escolha natural para quem busca produtividade e qualidade no desenvolvimento de software.

Ao adotar o Spring Boot, você estará equipando seu projeto com uma base sólida, pronta para enfrentar os desafios do mundo real com eficácia. E aí? Gostou dessa tecnologia?

Se você está mergulhando no desenvolvimento Java e quer conhecer ainda mais sobre o Spring Boot, confira esses conteúdos que separamos para você:

Abraços e até a próxima!

Armano Barros Alves Junior
Armano Barros Alves Junior

Um amante de tecnologia, leitura e da cultura geek, atualmente cursando Ciência da Computação na Universidade Federal do Tocantins. Faço parte do time do Suporte Educacional aqui na Alura.

Veja outros artigos sobre Programação