Différence entre @Component, @Service, @Controller, et @Repository dans le Framework Spring : 4 choses que tu devrais savoir
Explore la différence entre @Component, @Service, @Controller, et @Repository dans le Framework Spring : 4 points clés que tu devrais connaître.
Salut les amis, cela fait un moment que je n'ai pas partagé de question populaire du framework Spring. Aujourd'hui, je vais partager l'une des questions les plus populaires et fondamentales, à savoir la différence entre les annotations @Component, @Service, @Controller et @Repository.
Avant d'apprendre la différence entre les annotations @Component, @Service, @Controller et @Repository dans le framework Spring, il est important de comprendre le rôle de l'annotation @Component dans Spring. Lors de la première version de Spring, tous les beans devaient être déclarés dans un fichier XML.
Pour un projet de grande envergure, cela devient rapidement une tâche massive, et l'équipe de Spring reconnaît rapidement le problème. Dans les versions ultérieures, ils ont introduit l'injection de dépendances basée sur les annotations et la configuration basée sur Java.
À partir de Spring 2.5, l'injection de dépendances basée sur les annotations a été introduite, ce qui analyse et enregistre automatiquement les classes comme des beans Spring annotés avec l'annotation @Component.
Cela signifie que vous ne déclarez pas ce bean en utilisant la balise <bean> et n'injectez pas la dépendance, cela sera fait automatiquement par Spring. Cette fonctionnalité était activée et désactivée à l'aide de la balise <context:component-scan>.
Maintenant que vous savez ce que fait l'annotation @Component, voyons ce que font les annotations @Service, @Controller et @Repository.
Ce ne sont rien d'autre que des formes spécialisées de l'annotation @Component pour certaines situations. Au lieu d'utiliser @Component sur une classe de contrôleur dans Spring MVC, nous utilisons @Controller, qui est plus lisible et approprié.
En utilisant cette annotation, nous faisons deux choses : premièrement, nous déclarons que cette classe est un bean Spring et doit être créée et gérée par le contexte d'application Spring, mais nous indiquons également que c'est un contrôleur dans la configuration MVC. Cette dernière propriété est utilisée par des outils et fonctionnalités spécifiques au web.
Par exemple, DispatcherServlet recherchera les annotations @RequestMapping sur les classes annotées avec @Controller mais pas avec @Component.
Cela signifie que @Component et @Controller sont les mêmes en ce qui concerne la création de bean et l'injection de dépendances, mais le second est une forme spécialisée du premier.
Même si vous remplacez l'annotation @Controller par @Component, Spring peut détecter et enregistrer automatiquement la classe de contrôleur, mais cela peut ne pas fonctionner comme vous vous y attendez en ce qui concerne le mappage des requêtes. Vous pouvez consulter le cours Spring Master Class sur Udemy pour plus de détails sur ces annotations.
La même chose est vraie pour les annotations @Service et @Repository, ce sont des spécialisations de @Component dans les couches de service et de persistance. Un bean Spring dans la couche de service doit être annoté avec @Service au lieu de l'annotation @Component, et un bean Spring dans la couche de persistance doit être annoté avec @Repository.
En utilisant une annotation spécialisée, on touche deux oiseaux d'un coup. Premièrement, ils sont traités comme des beans Spring, et deuxièmement, vous pouvez ajouter un comportement spécifique requis par cette couche.
Par exemple, @Repository n'aide pas seulement à la configuration basée sur les annotations, mais il capture également des exceptions spécifiques à la plateforme et les renvoie comme l'une des exceptions non vérifiées unifiées de Spring.
Cependant, pour cela, vous devez également déclarer PersistenceExceptionTranslationPostProcessor d'org.springframework.dao.annotation comme bean Spring dans le contexte de votre application.
Ce post-processeur de bean ajoute un conseiller à tout bean annoté avec @Repository, de sorte que toutes les exceptions spécifiques à la plateforme sont capturées, puis renvoyées comme l'une des exceptions d'accès aux données non vérifiées de Spring. Vous pouvez également consulter Spring Framework: Beginner to Guru sur Udemy pour plus de détails.
C'est également l'une des questions fréquemment posées lors d'un entretien Spring et un concept populaire du point de vue de la certification Spring. Vous trouverez quelques questions basées sur ces annotations et leur utilisation dans l'examen de certification professionnel Spring.
Comment fonctionne la recherche de composants dans Spring ?
À partir de Spring 2.0, Spring fournit <context:component-scan> et une injection de dépendances basée sur les annotations pour détecter et enregistrer automatiquement les beans Spring au lieu de les spécifier dans le fichier XML.
Cependant, il ne recherche que les annotations @Component et ne recherche pas en général les annotations @Controller, @Service et @Repository. Elles sont analysées car elles sont elles-mêmes annotées avec @Component.
Jetez simplement un œil aux définitions des annotations @Controller, @Service et @Repository :
@Component
public @interface Service {
….
}
@Component
public @interface Repository {
….
}
@Component
public @interface Controller {
….
}Ainsi, on ne peut pas dire à tort que @Controller, @Service et @Repository sont des types spéciaux d'annotations @Component. <context:component-scan> les détecte et enregistre leurs classes suivantes comme des beans, tout comme si elles étaient annotées avec @Component.
Elles sont analysées car elles sont elles-mêmes annotées avec @Component. Si vous définissez votre propre annotation personnalisée et l'annoter avec @Component, elle sera également analysée avec context:component-scan.
Si vous voulez en savoir plus sur l'injection de dépendances, l'auto-câblage et les différents types de configuration dans Spring, par exemple la configuration basée sur XML, la configuration basée sur les annotations et la configuration Java dans Spring, je vous suggère de suivre le cours Spring Fundamentals sur Pluralsight. Un essai gratuit est également disponible.
En résumé, voici un bon résumé de ce que font les annotations @Component, @Service, @Controller et @Repository dans le framework Spring :
@Component est une stéréotype générique pour n'importe quel composant ou bean géré par Spring.
@Repository est un stéréotype pour la couche de persistance.
@Service est un stéréotype pour la couche de service.
@Controller est un stéréotype pour la couche de présentation (spring-MVC).
Et voici un joli diagramme pour expliquer la hiérarchie de toutes ces annotations dans le framework Spring.
C'est tout sur la différence entre @Component
Peace ✌️
Cindano Jonathan
Merci de faire partie de notre communauté ! Avant de partir :
❤️ J'aime l'histoire et je suis l'auteur 👉
📰 Voir plus de contenu dans mes publications
🔔 Suivez-nous : Twitter | LinkedIn | Newsletter



