@Component vs @Repository et @Service au printemps

@Component vs @Repository et @Service au printemps

 

1. introduction

Dans ce rapide tutoriel, nous allons découvrir les différences entre les annotations@Component, @Repository, @Service, dans Spring Framework.

Lectures complémentaires:

Guide du printemps @Autowired

Guide d'utilisation la plus courante des annotations et qualificatifs Springs @Autowired

Read more

L'annotation Spring @Qualifier

@Autowired seul ne suffit parfois pas à lever l'ambiguïté des dépendances. Vous pouvez câbler plus précisément en utilisant l'annotation @Qualifier. @Primary peut aussi aider.

Read more

2. Annotations de printemps

Dans la plupart des applications classiques, nous avons des couches distinctes telles que l’accès aux données, la présentation, le service, l’entreprise, etc.

Et, dans chaque couche, nous avons différents haricots. En termes simples, pour les détecter automatiquement,Spring uses classpath scanning annotations.

Ensuite, il enregistre chaque bean dans lesApplicationContext.

Voici un bref aperçu de quelques-unes de ces annotations:

  • @Component est un stéréotype générique pour tout composant géré par Spring

  • @Service annote les classes au niveau de la couche service

  • @Repository annote les classes au niveau de la couche de persistance, qui agira comme un référentiel de base de données

Nous avons déjà unextended article sur ces annotations. Nous allons donc nous concentrer uniquement sur les différences entre eux.

3. Qu'est ce qui est different?

The major difference between these stereotypes is they are used for different classification. Lorsque nous annotons une classe pour la détection automatique, nous devrions utiliser le stéréotype respectif.

Maintenant, passons en revue plus en détail.

3.1. @Component

We can use @Component across the application to mark the beans as Spring’s managed components. Spring ramasse et enregistre uniquement les beans avec@Component  et ne recherche pas les@Service et@Repository en général.

Ils sont enregistrés dansApplicationContext car ils sont eux-mêmes annotés avec@Component:

@Component
public @interface Service {
}
@Component
public @interface Repository {
}

@Service et@Repository sont des cas particuliers de@Component. Ils sont techniquement les mêmes mais nous les utilisons à des fins différentes.

3.2. @Repository

@Repository’s job is to catch persistence specific exceptions and rethrow them as one of Spring’s unified unchecked exception.

Pour ce printemps fournitPersistenceExceptionTranslationPostProcessor, qui nécessite d'ajouter dans notre contexte d'application:

Ce post-processeur de bean ajoute un conseiller à tout bean annoté avec@Repository.

3.3. @Service

We mark beans with @Service to indicate that it’s holding the business logic. Il n’ya donc pas d’autre spécialité que de l’utiliser dans la couche service.

4. Conclusion

In this write-up, we learned about the differences between  @Component, @Repository, @Service annotations. Nous avons examiné chaque annotation séparément avec les domaines d'utilisation.

En conclusion, c’est toujours une bonne idée de choisir l’annotation en fonction de leurs conventions de calque.