@Component vs @Repository e @Service na Primavera
1. Introdução
Neste tutorial rápido, vamos aprender sobre as diferenças entre as anotações de@Component, @Repository, @Service, no Spring Framework.
Leitura adicional:
Guia para Spring @Autowired
Um guia para o uso mais comum de anotações e qualificadores do Springs @Autowired
A anotação Spring @Qualifier
@Autowired sozinho às vezes não é suficiente para eliminar a ambigüidade de dependências. Você pode conectar com mais precisão usando a anotação @Qualifier. O @Primary também pode ajudar.
2. Anotações da Primavera
Nas aplicações mais comuns, temos camadas distintas, como acesso a dados, apresentação, serviço, negócios etc.
E, em cada camada, temos vários grãos. Simplificando, para detectá-los automaticamente,Spring uses classpath scanning annotations.
Em seguida, ele registra cada bean emApplicationContext.
Esta é uma visão geral rápida de algumas dessas anotações:
-
@Component é um estereótipo genérico para qualquer componente gerenciado por Spring
-
@Service anota classes na camada de serviço
-
@Repository anota classes na camada de persistência, que atuará como um repositório de banco de dados
Já temos umextended article sobre essas anotações. Portanto, vamos manter o foco apenas nas diferenças entre eles.
3. O que é diferente?
The major difference between these stereotypes is they are used for different classification. Quando anotamos uma classe para autodetecção, devemos usar o estereótipo respectivo.
Agora, vamos examiná-los em mais detalhes.
3.1. @Component
We can use @Component across the application to mark the beans as Spring’s managed components. O Spring apenas coleta e registra grãos com@Component e não procura@Servicee@Repository em geral.
Eles estão registrados emApplicationContext porque eles próprios são anotados com@Component:
@Component
public @interface Service {
}
@Component
public @interface Repository {
}
@Service e@Repository são casos especiais de@Component. Eles são tecnicamente iguais, mas os usamos para diferentes propósitos.
3.2. @Repository
@Repository’s job is to catch persistence specific exceptions and rethrow them as one of Spring’s unified unchecked exception.
Para este Spring fornecePersistenceExceptionTranslationPostProcessor, que requer a adição em nosso contexto de aplicativo:
Este pós-processador de bean adiciona um consultor a qualquer bean anotado com@Repository.
3.3. @Service
We mark beans with @Service to indicate that it’s holding the business logic. Portanto, não há outra especialidade, exceto usá-la na camada de serviço.
4. Conclusão
In this write-up, we learned about the differences between @Component, @Repository, @Service annotations. Examinamos cada anotação separadamente com as áreas de uso.
Como conclusão, é sempre uma boa ideia escolher a anotação com base em suas convenções de camada.