716 votes

Différence entre <context:annotation-config>vs <context:component-scan></context:component-scan> </context:annotation-config>

Je suis en train d'apprendre le Printemps 3 et je ne semblent pas saisir la fonctionnalité derrière <context:annotation-config> et <context:component-scan>.

De ce que j'ai lu, ils semblent pour gérer les différentes annotations (@Nécessaire, @Autocâblés etc vs @Composant, @Référentiel, @Service, etc), mais également à partir de ce que j'ai lu il enregistre la même haricot post-processeur classes.

Pour me confondre encore plus, il y a un annotation-config attribut <context:component-scan>.

Quelqu'un peut jeter un peu de lumière sur ces tags? Ce qui est similaire, ce qui est différent, est un remplacées par l'autre, ils se complètent l'un l'autre, ai-je besoin d'eux, les deux?

170voto

Tomasz Nurkiewicz Points 140462

J'ai trouvé ce joli résumé de ce qui les annotations sont repris par déclarations. En l'étudiant, vous trouverez qu' <context:component-scan/> reconnaît un sur-ensemble d'annotations reconnu par <context:annotation-config/>, à savoir:

  • @Component, @Service, @Repository, @Controller, @Endpoint
  • @Configuration, @Bean, @Lazy, @Scope, @Order, @Primary, @Profile, @DependsOn, @Import, @ImportResource

Comme vous pouvez le voir <context:component-scan/> logiquement s'étend <context:annotation-config/> avec CLASSPATH composant de numérisation et de Java @fonctions de Configuration.

99voto

user2673474 Points 131

Le printemps vous permet de faire deux choses:

  1. Permettra à l'autowiring de haricots
  2. Détection automatique de haricots

1. Permettra à l'autowiring
Habituellement dans applicationContext.xml vous définissez les haricots et autres haricots sont câblés à l'aide de constructeur ou un setter. Vous pouvez câbler les haricots à l'aide de XML ou des annotations. Dans le cas où vous utilisez des annotations, vous devez activer les annotations et vous devez ajouter <context:annotation-config /> dans applicationContext.xml. Ceci permettra de simplifier la la structure de la balise de applicationContext.xmlparce que vous n'aurez pas manuellement les fils des haricots (constructeur ou setter). Vous pouvez utiliser @Autowire d'annotation et les fèves vont être câblé par type.

Un pas en avant pour échapper à la manuel de configuration XML est

2. Autodiscovery
La détection automatique est de simplifier le XML un peu plus loin, dans le sens que vous n'avez même pas besoin de trop ajouter de l' <bean> balise dans applicationContext.xml. Vous venez de marque spécifiques des haricots avec l'une des opérations suivantes annotation et le Printemps sera automatiquement fil de l'marqué les haricots et leurs dépendances dans le Printemps conteneur. Les annotations sont comme suit: @Contrôleur, @Service, @Composant, @Référentiel. En utilisant <context:component-scan> et en pointant le forfait de base, le Printemps sera auto-découvrir et câbler les composants du Printemps conteneur.


En conclusion:

  • <context:annotation-config /> est utilisé pour être en mesure d'utiliser @Autocâblés annotation
  • <context:component-scan /> est utilisé pour déterminer la recherche de spécifique de haricots et de tenter de permettra à l'autowiring.

39voto

Sean Patrick Floyd Points 109428

<context:annotation-config> active de nombreuses différentes annotations dans les haricots, qu'ils sont définis en XML ou dans le volet de numérisation.

<context:component-scan> est de définir les haricots sans l'aide de XML

Pour de plus amples informations, lire:

31voto

Sparticles Points 152

La différence entre les deux est vraiment simple !.

Vous permet d’utiliser des annotations qui sont limitées au câblage des propriétés et des constructeurs seulement des haricots !.

Où en tant que

Permet tout ce que `` peut faire, avec l’ajout de l’utilisation de stéréotypes par exemple.. @Component, @Service, @Repository. Donc vous pouvez câbler les fèves entières et pas seulement réservé aux constructeurs ou propriétés !.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X