@ComponentScan crée des Beans en utilisant @Configuration et @Component. Ces deux annotations fonctionnent bien lorsqu'elles sont permutées. Quelle est la différence alors?
@Configuration Indique qu'une classe déclare un ou plusieurs @Bean méthodes et peuvent être traitées par le conteneur Spring pour générer le haricot définitions et demandes de service pour ces haricots à l'exécution
@Component Indique qu'une classe annotée est un "composant". Tel les classes sont considérées comme des candidates à la détection automatique lors de l'utilisation de configuration basée sur des annotations et analyse des chemins de classes.
La configuration est méta-annotée avec @Component, donc Les classes @Configuration sont candidates à l'analyse de composants
Vous pouvez voir plus ici
@Configuration est également un @Component mais un @Component ne peut pas agir comme un @Cofinguration.
En fait, la réponse est incomplète. Est-il vrai que:
@Component Indique qu'une classe annotée est un "composant". Tel les classes sont considérées comme des candidates à la détection automatique lors de l'utilisation de configuration basée sur des annotations et analyse des chemins de classes.
Mais vous pouvez créer la classe MyConfiguration.Java, puis le stéréotype avec @Component
et y ajouter la déclaration @Beans
. De cette façon, cela ressemblera à une configuration. La principale différence est que lorsque la classe annotée avec @Configuration
@Bean
les méthodes annotées sont proxy utilisantCGLIBà nouveau et créez une autre instance comme cela se produit lors de l'utilisation de @Component avec @Bean
@Configuration - C'est comme beans.xml mais la configuration de bean basée sur Java. Cela signifie que la classe annotée avec cette annotation est l'endroit où sont configurés les beans qui seront candidats à la détection automatique. Dans cette classe, les méthodes annotées avec @Bean renvoient l'objet de la classe.
Exemple:
@Configuration
public class ConfigClass {
@Bean
public UserClass getObject() {
return new UserClass();
}
}
@Component - Vous ne pouvez pas connecter automatiquement (@Autowire) une classe si elle n'est pas marquée avec @Component. Cela signifie que lorsque vous souhaitez autoriser une classe utilisant une annotation, cette classe doit être annotée avec @Component.
Exemple:
@Component
public class A { .... }
public class B {
@Autowire
A a;
.....
.....
}
Spring Document de référence:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Configuration.html