O ecossistema Spring Boot utiliza um vasto conjunto de anotações para reduzir a verbosidade do código XML tradicional e automatizar a configuração de aplicações Java. Abaixo está um detalhamento técnico das anotações essenciais, divididas por contexto de utilização.
Anotações Fundamentais (Core)
@SpringBootApplication: É uma anotação de conveniência que agrupa três comportamentos principais: @Configuration (define a classe como fonte de definições de beans), @EnableAutoConfiguration (ativa a configuração automática baseada nas dependências do classpath) e @ComponentScan (instrui o framework a buscar outros componentes e serviços no pacote atual e em seus subpacotes).
package br.com.exemplo.inventario;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class InventarioApplication {
public static void main(String[] args) {
SpringApplication.run(InventarioApplication.class, args);
}
}
@Configuration: Indica que a classe contém definições de beans gerenciados pelo contêiner IoC. Substitui as configurações em XML.
@Bean: Utilizado em nível de método dentro de uma classe @Configuration. O objeto retornado pelo método é registrado como um bean no contexto.
@Component: Estereótipo genérico para qualquer classe que deva ser gerenciada pelo framework.
@Service: Especialização de @Component usada semanticamente na camada de lógica de negócios.
@Repository: Espceialização para a camada de acesso a dados (DAO). Habilita automaticamente a tradução de exceções específicas do banco de dados para exceções não verificadas do Spring.
@Autowired: Realiza a injeção de dependência automática por tipo (byType). Pode ser aplicado em construtores, métodos e campos. Possui o atributo required que, se definido como false, evita erros de inicialização caso o bean não exista no contexto.
@Qualifier: Utilizado em conjunto com @Autowired para resolver ambiguidades quando existem múltiplos beans da mesma interface, especificando o nome exato do bean a ser injetado.
@Autowired
@Qualifier("processadorPagamentoPix")
private EstrategiaPagamento estrategiaPagamento;
@Resource: Semelhante ao @Autowired, mas realiza a injeção por nome (byName) por padrão. Pertence à especificação JSR-250.
@Inject: Equivalente ao @Autowired, proveniente da especificação JSR-330, mas carece do atributo required.
@Value: Injeta valores de propriedades definidas em arquivos de configuração, como application.properties, ou a partir de variáveis de ambiente.
@Value("${configuracao.ambiente.nome}")
private String nomeDoAmbiente;
@Import: Permite a importação de outras classes de configuração de forma programática.
@ImportResource: Utilizado para carregar configurações legadas a partir de arquivos XML específicos.
Anotações Web (Spring MVC)
@Controller: Define uma classe como controlador web. Os métodos geralmente retornam Strings que representam os nomes das views (templates) a serem renderizadas pelo motor de templates.
@Controller
@RequestMapping("/painel")
public class PainelController {
@GetMapping("/inicio")
public String exibirPaginaInicial(Model model) {
model.addAttribute("mensagem", "Bem-vindo ao sistema de gestão");
return "inicio"; // Renderiza inicio.html ou inicio.jsp
}
}
@RestController: Combina as anotações @Controller e @ResponseBody. É ideal para construção de APIs RESTful, pois instrui o framework a serializar automaticamente os objetos de retorno em formatos como JSON ou XML diretamente no corpo da resposta HTTP.
@RestController
@RequestMapping("/api/produtos")
public class ProdutoApiController {
@GetMapping("/status")
public Map<string string=""> verificarStatus() {
return Collections.singletonMap("status", "operacional");
}
}</string>
@RequestMapping: Mapeia requisições web para métodos específicos. Pode ser aplicado a classes (definindo um caminho base) ou a métodos. Suporta filtros refinados por params, headers, method, consumes (Content-Type esperado) e produces (tipo de mídia de retorno).
@ResponseBody: Indica que o retorno do método deve ser escrito diretamente no corpo da resposta, ignorando a resolução de views. Já está implícito ao usar @RestController.
@PathVariable: Extrai valores de variáveis de caminho definidas na URI do template de mapeamento.
@GetMapping("/pedidos/{numeroPedido}/detalhes")
public PedidoDto buscarDetalhesPedido(@PathVariable String numeroPedido) {
// Lógica para buscar pedido pelo número extraído da URL
return new PedidoDto(numeroPedido, "Em processamento");
}
@RequestParam: Vincula parâmetros de consulta (query parameters) da requisição HTTP aos argumentos do método.
Anotações de Persistência (Spring Data JPA / Hibernate)
@Entity e @Table: Marcam uma classe POJO como uma entidade de banco de dados. O uso de @Table é opcional e serve para customizar o nome da tabela caso este difira do nome da classe.
@Id: Define o campo que atua como chave primária da entidade.
@GeneratedValue: Configura a estratégia de geração automática para a chave primária (ex: IDENTITY, SEQUENCE, AUTO).
@SequenceGenerator: Permite nomear e configurar geradores de sequência específicos do banco de dados, que são referenciados posteriormente pelo atributo generator do @GeneratedValue.
@Column: Mapeia um atributo da classe a uma coluna específica no banco de dados. Permite a definição de restrições como tamanho, nulidade e unicidade.
@Transient: Indica ao provedor JPA que o campo marcado não deve ser persistido no banco de dados.
@Basic: Configura o comportamento de busca de um campo, permitindo definir o carregamento preguiçoso (lazy loading) através de fetch = FetchType.LAZY.
@OneToOne, @OneToMany, @ManyToOne: Estabelecem os relacionamentos de cardinalidade entre entidades.
@JoinColumn: Especifica a coluna física que serve como chave estrangeira em um relacionamento.
@MappedSuperclass: Aplicado a uma classe base cujas propriedades devem ser herdadas por entidades filhas, mas que não será mapeada como uma tabela isolada no banco.
@NoRepositoryBean: Evita que o Spring Data tente criar uma instância de repositório para interfaces base que servem apenas para herança.
@JsonIgnore: Impede que uma propriedade da entidade seja serializada ou desserializada durante a conversão de/para JSON pela biblioteca Jackson.
Tratamento Global de Exceções
@ControllerAdvice: Permite a interceptação de requisições em todos os controladores da aplicação. Atua como a base para a criação de manipuladores de exceções centralizados, validações globais e injeção de atributos padrão em modelos de resposta.
@ExceptionHandler: Usado dentro de uma classe marcada com @ControllerAdvice (ou localmente em um controlador) para capturar exceções específicas. Permite definir a lógica de resposta unificada, como formatar um JSON de erro customizado e retornar o código de status HTTP adequado.