Anotações Spring no Java: Guia Completo

Introdução às Anotações Spring

O Spring Framework utiliza anotações para simplificar a configuração e gerenciamento de componentes em aplicações Java. Este guia explora as principais anotações do Spring e seu uso prático.

1. Anotação @Controller

A anotação @Controller é utilizada para marcar classes que atuam como controladores na camada de apresentação da aplicação. Essas classes são responsáveis por processar requisições HTTP e retornar respostas apropriadas.

2. Anotação @Service

A anotação @Service é aplicada a classes que contêm a lógica de negócio da aplicação. Essas classes são responsáveis por implementar as regras de negócio e coordenar as operações entre a camada de controle e a camada de persistência.

3. Anotação @Repository

A anotação @Repository é usada para marcar classes que fornecem mecanismos de acesso a dados, como DAOs (Data Access Objects). Essas classes encapsulam a lógica de interação com o banco de dados.

4. Anotação @Component

A anotação @Component é uma anotação genérica que pode ser usada para qualquer classe Spring que não se enquadre nas categorias específicas de @Controller, @Service ou @Repository.

Configurando o Escaneamento de Componentes

Para que o Spring reconheça essas anotações, é necessário configurar o escaneamento de componentes no arquivo de configuração:



<context:component-scan base-package="com.exemplo.aplicacao">
</context:component-scan>

O Spring irá escanear os pacotes especificados e registrar automaticamente as classes anotadas no contêiner IoC. Por padrão, o nome do bean gerado é o nome da classe com a primeira letra minúscula.

5. Anotação @Scope

A anotação @Scope define o escopo de um bean. Por padrão, todos os beans do Spring são singletons (uma única instância para toda a aplicação). Para criar múltiplas instâncias:


@Scope(value = "prototype")
public class Produto {
    // Lógica da classe
}

Configuração Avançada de Escaneamento

O escaneamento de componentes pode ser configurado com filtros para incluir ou excluir classes específicas:


<context:component-scan base-package="com.exemplo.aplicacao">
    <!-- Exclui classes com a anotação @Server -->
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Server" />
    
    <!-- Exclui classes com a anotação @Controller -->
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>

6. Anotação @Autowired

A anotação @Autowired realiza injeção de dependências automaticamente. O Spring injeta as dependências necessárias nos beans:


@Autowired
private GerenciadorProduto gerenciadorProduto;

@RequestMapping("/listar")
public ModelAndView listarProdutos() {
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("listaProdutos");
    
    List<Produto> produtos = gerenciadorProduto.buscarTodos();
    modelAndView.addObject("produtos", produtos);
    
    return modelAndView;
}

O @Autowired pode ser configurado como opcional com o parâmetro required:


@Autowired(required = false)
private ConfiguracaoEmail configuracaoEmail;

7. Anotação @Qualifier

Quando existem múltiplos beans do mesmo tipo, o @Qualifier especiifca qual bean deve ser injetado:


@Autowired
@Qualifier("gerenciadorProdutoPadrao")
private GerenciadorProduto gerenciadorProduto;

8. Anotação @Resource

A anotação @Resource também realiza injeção de dependências, mas é parte da especificação Java EE, não específica do Spring. Oferece melhor portabilidade entre diferentes frameworks:


@Resource(name = "servicoNotificacao")
private ServicoNotificacao servicoNotificacao;

Embora o @Resource tenha menos recursos que o @Autowired (como a opção required), sua vantagem é não depender do Spring Framework, tornando o código mais portátil.

Tags: Spring Framework java Anotações Injeção de Dependências IoC

Publicado em 6-19 21:45