🍃 Capítulo 01: Introdução ao Spring Boot 3+, Inversão de Controle e REST APIs
🎯 Objetivos da Aula
Ao final desta aula, você será capaz de:
- Compreender a função do Spring Boot 3+ no desenvolvimento de microserviços e REST APIs em Java 17+.
- Entender os conceitos de Inversão de Controle (IoC) e Injeção de Dependências (DI).
- Criar uma aplicação backend executável com servidor web Apache Tomcat embutido.
- Construir o primeiro endpoint HTTP RESTful utilizando as anotações
@RestControllere@GetMapping.
🧠 1. O que é o Spring Boot 3+?
O Spring Boot é um framework opinativo construído sobre o ecossistema Spring que elimina a necessidade de configurações complexas em arquivos XML ou servidores de aplicação externos (como GlassFish ou WildFly).
flowchart TD subgraph SpringBootApp ["Aplicação Spring Boot 3+ (JAR Auto-contido)"] IoC["Containers de Inversão de Controle (Spring IoC Context)"] EmbeddedTomcat["🖥️ Servidor Apache Tomcat Embutido (Porta 8080)"] RestController["⚙️ RestControllers (@GetMapping, @PostMapping)"] IoC --> RestController & EmbeddedTomcat end Client["📱 Cliente Web / App Mobile"] -->|HTTP Request GET /api/status| EmbeddedTomcat EmbeddedTomcat --> RestController RestController -->|HTTP Response 200 OK + JSON| Client
Principais Benefícios do Spring Boot:
- Auto-configuração (
@SpringBootApplication): Inicializa automaticamente o banco de dados, manipuladores de JSON (Jackson) e rotas HTTP com base nas dependências dopom.xml. - Servidor Embutido: Gera um único arquivo executável
.jarque inclui o Apache Tomcat na porta 8080. - Injeção de Dependência (
@Autowired): O Spring gerencia o ciclo de vida dos objetos (Beans) e os injeta onde forem necessários.
💻 2. Anatomia do Primeiro Endpoint REST (StatusController.java)
package com.portal.backend.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
// Indicates that this class is a REST Controller returning JSON automatically
@RestController
@RequestMapping("/api/status")
public class StatusController {
// Handles HTTP GET requests to /api/status
@GetMapping
public Map<String, Object> obterStatusSistema() {
Map<String, Object> resposta = new HashMap<>();
resposta.put("aplicacao", "Portal Acadêmico Backend API");
resposta.put("status", "OPERACIONAL");
resposta.put("versaoJava", System.getProperty("java.version"));
resposta.put("timestamp", LocalDateTime.now().toString());
return resposta; // Jackson serializes the Map directly to JSON payload!
}
}💻 3. Classe Principal de Inicialização (BackendApplication.java)
package com.portal.backend;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BackendApplication {
public static void main(String[] args) {
// Runs the embedded Tomcat server on port 8080
SpringApplication.run(BackendApplication.class, args);
System.out.println(">> REST API Spring Boot 3+ iniciada com sucesso na porta 8080!");
}
}⚔️ 4. Desafios Práticos (Exercícios 30/50/20)
🥉 Nível Bronze (Fixação)
- Para que serve a anotação
@RestControllerem uma classe Spring Boot? - O que significa o conceito de Injeção de Dependências (DI) gerenciado pelo Spring IoC Container?
🥈 Nível Prata (Aplicação)
- Crie uma nova classe de controlador
AlunoControllerno pacotecom.portal.backend.controllercontendo a anotação@GetMapping("/api/alunos/resumo")que retorne a quantidade de alunos cadastrados e a média geral da instituição em formato JSON.
🥇 Nível Ouro (Desafio)
- Configure o arquivo de propriedades
src/main/resources/application.propertiespara alterar a porta padrão do servidor de 8080 para 8090 (server.port=8090) e adicione um prefixo global de contexto/backendàs rotas. Teste o acionamento no navegador.
💡 Gabaritos Sanfonados de Resposta
💡 Ver Gabarito do Nível Bronze
- A anotação
@RestControlleravisa ao Spring que a classe manipulará requisições HTTP REST e que os retornos dos métodos devem ser automaticamente serializados em formato JSON (via biblioteca Jackson) no corpo da resposta. - Injeção de Dependências é a técnica onde o framework cria e fornece as instâncias dos objetos de serviço/repositório de forma automática, tirando a responsabilidade do desenvolvedor de usar a instrução
new.
💡 Ver Gabarito do Nível Prata & Ouro (Código Java Spring)
package com.portal.backend.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
@RequestMapping("/api/alunos")
public class AlunoController {
@GetMapping("/resumo")
public Map<String, Object> obterResumoAcademico() {
return Map.of(
"totalAlunos", 1250,
"mediaGeralInstituicao", 8.4,
"statusMatriculas", "ABERTAS"
);
}
}📚 Referências Teóricas Oficiais
- SPRING FRAMEWORK DOCUMENTATION. Spring Boot Reference Documentation (v3.x) (VMware Tanzu / Pivotal).
- WALLS, Craig. Spring in Action. 6th Edition. Manning Publications, 2022.
⬅️ Voltar ao Sumário da Fase 09 | Próximo Capítulo (Injeção de Dependências e Beans) ➡️