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.