@Component vs @Repository et @Service au printemps

1. Introduction

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

2. Annotations de printemps

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

Et, dans chaque couche, nous avons différents grains. En termes simples, pour les détecter automatiquement, Spring utilise des annotations d'analyse de chemin de classe .

Ensuite, il enregistre chaque bean dans ApplicationContext .

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à un article détaillé sur ces annotations. Nous allons donc nous concentrer uniquement sur les différences entre eux.

3. Qu'est-ce qui est différent?

La principale différence entre ces stéréotypes est qu'ils sont utilisés pour une classification différente. Lorsque nous annotons une classe pour la détection automatique, nous devons utiliser le stéréotype respectif.

Maintenant, passons en revue plus en détail.

3.1. @Composant

Nous pouvons utiliser @Component dans toute l'application pour marquer les beans comme composants gérés par Spring . Spring ramasse et enregistre uniquement les beans avec @Component et ne recherche pas @Service et @Repository en général.

Ils sont enregistrés dans ApplicationContext 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. @Dépôt

Le travail de @Repository consiste à intercepter les exceptions spécifiques à la persistance et à les renvoyer comme l’une des exceptions non contrôlées unifiées de Spring .

Pour ce printemps fournit PersistenceExceptionTranslationPostProcessor , 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. @Un service

Nous marquons les beans avec @Service pour indiquer qu'il contient la logique métier . Il n'y a donc pas d'autre spécialité que de l'utiliser dans la couche service.

4. Conclusion

Dans cette rédaction, nous avons appris sur les différences entre @component, @Repository, @service annotations . Nous avons examiné chaque annotation séparément avec les domaines de leur utilisation.

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