web-dev-qa-db-fra.com

Avantages d'utiliser des stéréotypes printaniers?

Je développe une application web utilisant spring-mvc.

Les stéréotypes @Controller, @Service et @Repository sont désormais disponibles.

J'ai trouvé @Controller particulièrement utile, spécialement parce que j'utilise

<context:component-scan base-package="my.cool.controller"/>

Maintenant, en ce qui concerne @Service et @Repository, jusqu'à présent, ressemble à

  1. Les exceptions sont mieux gérées si la classe est annotée avec le stéréotype correct, ok, c'est un avantage que je reconnais
  2. Je pourrais utiliser l'analyse de composants pour les services et les DAO/référentiels, mais je n'aime pas l'idée d'utiliser l'analyse de composants, car elle ralentit le temps de démarrage de l'application, et c'est une caractéristique clé pour moi (même si ce n'est que 1 sec et je redéploie une fois par semaine)

Donc, à part les meilleures exceptions, un autre avantage? L'annotation des classes a-t-elle un impact sur les performances?

Explication des stéréotypes:

  • @Service - Annotez toutes vos classes de service avec @Service. Cette couche connaît l'unité de travail. Toute votre logique métier sera dans les classes de service. Généralement, les méthodes de couche de service sont couvertes par la transaction. Vous pouvez effectuer plusieurs appels DAO à partir de la méthode de service, si une transaction échoue, toutes les transactions doivent être annulées.
  • @Repository - Annotez toutes vos classes DAO avec @Repository. Toute votre logique d'accès à la base de données doit être dans des classes DAO.
  • @Component - Annotez vos autres composants (par exemple REST classes de ressources) avec le stéréotype du composant.
  • @Autowired - Laissez Spring câbler automatiquement d'autres beans dans vos classes en utilisant l'annotation @Autowired.

@Component est un stéréotype générique pour tout composant géré par Spring. @Repository, @Service, et @Controller sont des spécialisations de @Component pour des cas d'utilisation plus spécifiques, par exemple, dans les couches de persistance, de service et de présentation, respectivement.

Raisons de les utiliser:

  • Le principal avantage d'utiliser @Repository ou @Service par rapport à @Component est qu'il est facile d'écrire un pointcut AOP qui cible, par exemple, toutes les classes annotées avec @Repository.
  • Vous n'avez pas besoin d'écrire bean définitions dans un fichier xml contextuel. Au lieu de cela, annotez les classes et utilisez-les par câblage automatique.
  • Des annotations spécialisées aident à délimiter clairement les couches d'application (dans une application standard à 3 niveaux).

Maintenant, l'impact sur les performances de l'utilisation des beans et des annotations xml contextuels est le même. L'analyse des composants est un peu plus chère (lorsque vous recherchez @Service, @Component). Les annotations sont "analysées" avec réflexion, le xml - avec un analyseur xml. Mais, comme vous l'avez dit, c'est l'heure du démarrage - cela n'arrive qu'une seule fois. Et sur une machine modérée, cela démarre assez rapidement, même avec des annotations.

56
Jeevan Patil

L'analyse des composants vous évite de définir manuellement chaque bean via xml ou Java.

Plusieurs types stéréo sont là pour définir des couches telles que la couche de service, la couche de données, etc.

2
Bhushan Bhangale