Détails
Quelle est la différence entre les annotations @Component, @Repository & ; @Service dans Spring ?
Les annotations @Component
, @Repository
et @Service
peuvent-elles être utilisées de manière interchangeable dans Spring ou apportent-elles une fonctionnalité particulière en dehors de leur rôle de notation ?
En d'autres termes, si j'ai une classe Service et que je change l'annotation @Service
en @Component
, se comportera-t-elle de la même manière ?
Ou l'annotation influence-t-elle également le comportement et la fonctionnalité de la classe ?
1957
3
Extrait de Spring Documentation :
Ils sont presque identiques - ils signifient tous que la classe est un bean Spring.
@Service
,@Repository
et@Controller
sont des@Component
s spécialisés. Vous pouvez choisir d'effectuer des actions spécifiques avec eux. Par exemple :@Controller
sont utilisés par spring-mvc@Repository
sont éligibles pour la traduction des exceptions de persistance.Une autre chose est que vous désignez sémantiquement les composants à différentes couches.
Une chose que
@Component
offre est que vous pouvez annoter d'autres annotations avec lui, et ensuite les utiliser de la même manière que@Service
.Par exemple, j'ai récemment fait :
Donc toutes les classes annotées avec
@ScheduledJob
sont des spring beans et en plus de cela sont enregistrées comme des jobs quartz. Vous avez juste à fournir du code qui gère l'annotation spécifique.L'utilisation des annotations
@Service
et@Repository
est importante du point de vue de la connexion à la base de données.@Service
pour toutes vos connexions aux bases de données de type service web.@Repository
pour toutes vos connexions à des bases de données de type "stored proc".Si vous n'utilisez pas les annotations appropriées, vous pouvez être confronté à des exceptions de commit écrasées par des transactions de rollback. Vous verrez des exceptions pendant le test de charge de stress qui sont liées aux transactions JDBC rollback.