Guia Completo de Anotações no Spring Boot

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.

Tags: spring-boot java spring-mvc spring-data-jpa annotations

Publicado em 6-25 00:51