web-dev-qa-db-fra.com

Quelle est la différence entre @ComponentScan et @EnableAutoConfiguration dans Spring Boot?

Quelle est la différence entre le @ComponentScan et @EnableAutoConfiguration annotations dans Spring Boot? Est-il nécessaire d'ajouter ceux-ci? Mon application fonctionne très bien sans ces annotations. Je veux juste comprendre pourquoi nous devons les ajouter.

49
E2rabi

Quelle est la différence entre les annotations @ComponentScan et @EnableAutoConfiguration dans Spring Boot?

@EnableAutoConfiguration Une annotation indique à Spring Boot de "deviner" comment vous souhaitez configurer Spring, en fonction des dépendances de jar que vous avez ajoutées. Par exemple, si HSQLDB se trouve sur votre chemin d'accès aux classes et que vous n'avez configuré manuellement aucun bean de connexion à une base de données, Spring configurera automatiquement une base de données en mémoire.

@ComponentScan indique à Spring de rechercher d'autres composants, configurations et services dans le package spécifié. Spring peut analyser, détecter et enregistrer automatiquement vos beans ou composants à partir d’un package de projet prédéfini. Si aucun package n'est spécifié, le package de classe actuel est pris comme package racine.

Est-il nécessaire d'ajouter ces?

Si vous avez besoin du démarrage du printemps pour configurer automatiquement tout pour vous @EnableAutoConfiguration est requis. Vous n'avez pas besoin de l'ajouter manuellement, spring l'ajoutera en interne pour vous en fonction de l'annotation que vous fournissez.

En fait, le @SpringBootApplication annotation équivaut à utiliser @Configuration , @EnableAutoConfiguration et @ComponentScan avec leurs attributs par défaut.

Voir aussi:

59
Shaheer

L'un des principaux avantages de Spring Boot réside dans ses configurations basées sur les annotations par rapport aux configurations traditionnelles basées sur xml. @ EnableAutoConfiguration configure automatiquement l'application Spring en fonction de ses fichiers jar inclus. Il configure par défaut ou une assistance en fonction des dépendances dans pom. .xml. La configuration automatique est généralement appliquée en fonction du chemin de classe et des beans définis. Par conséquent, nous n'avons pas besoin de définir DataSource, EntityManagerFactory, TransactionManager, etc. et, comme par magie, en fonction du chemin de classe, Spring Boot crée automatiquement les beans appropriés et les enregistre pour nous. Par exemple, lorsqu'il y a un fichier Tomcat-embedded.jar dans votre chemin de classe, vous avez probablement besoin d'un fichier TomcatEmbeddedServletContainerFactory (à moins que vous n'ayez défini votre propre bean EmbeddedServletContainerFactory). @EnableAutoConfiguration possède un attribut exclude pour désactiver explicitement une configuration automatique, sinon nous pouvons simplement l'exclure du fichier pom.xml. Par exemple, si nous ne voulons pas que Spring configure le Tomcat, nous excluons spring-bootstarter-Tomcat de spring-boot-starter- Web.

@ ComponentScan fournit une portée pour l'analyse des composants de ressort, il se contente simplement le package de base fourni et récupère les dépendances requises par @Bean ou @Autowired, etc., dans une application Spring typique, @ComponentScan est utilisé dans des classes de configuration, celles annotées avec @Configuration. Les classes de configuration contiennent des méthodes annotées avec @Bean. Ces méthodes annotées @Bean génèrent des beans gérés par le conteneur Spring. Ces beans seront automatiquement détectés par l'annotation @ComponentScan. Certaines annotations rendent les beans détectables automatiquement, telles que @Repository, @Service, @Controller, @Configuration, @Component. Dans le code ci-dessous, Spring lance l'analyse à partir du package, y compris la classe BeanA.

@Configuration
@ComponentScan(basePackageClasses = BeanA.class)
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
public class Config {

  @Bean
  public BeanA beanA(){
    return new BeanA();
  }

  @Bean
  public BeanB beanB{
    return new BeanB();
  }

}
13
ShayneR