@Component vs @Repository e @Service na Primavera

@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

Read more

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.

Read more

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.