web-dev-qa-db-fra.com

Quelle est la différence entre @Configuration et @Component in Spring?

@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?

12
gaurav sood

@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

http://docs.spring.io/spring-framework/docs/4.0.4.RELEASE/javadoc-api/org/springframework/context/annotation/Configuration.html

@Configuration est également un @Component mais un @Component ne peut pas agir comme un @Cofinguration.

16
reos

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

7
jcrada

@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

0
Sachin Ghumbre