Quelle est la différence entre @ComponentScan et @EnableAutoConfiguration dans la botte de printemps?

Quelle est la différence entre @ComponentScan et @EnableAutoConfiguration annotations dans la botte de printemps? Est-il nécessaire de les ajouter? Mon application fonctionne très bien sans ces annotations. Je veux juste comprendre pourquoi nous devons les ajouter.

24
demandé sur blacktide 2016-01-26 03:40:16

3 réponses

Quelle est la différence entre @ComponentScan et @ EnableAutoConfiguration annotations dans la botte de printemps?

@EnableAutoConfiguration annotation indique à la botte de printemps de "deviner" comment vous voulez configurer le ressort, basé sur les dépendances jar que vous avez ajoutées. Par exemple, si HSQLDB est sur votre classpath, et que vous n'avez pas configuré manuellement les options de connexion à la base de données, Spring va auto-configurer une connexion en mémoire la base de données.

@ComponentScan indique à Spring de rechercher d'autres composants, configurations et services dans le paquet spécifié. Spring est capable d'Auto Scanner, détecter et enregistrer vos haricots ou des composants à partir d'un paquet de projet prédéfini. Si aucun paquet n'est spécifié, le paquet de la classe courante est considéré comme le paquet racine.

Est-il nécessaire de les ajouter?

si vous avez besoin D'un amorçage de printemps pour configurer automatiquement chaque chose pour vous @EnableAutoConfiguration est obligatoire. Vous n'avez pas besoin de l'ajouter manuellement, le printemps sera l'ajouter à l'interne, basée sur l'annotation que vous fournissez.

en Fait, le @SpringBootApplication l'annotation est équivalente à l'utilisation de @Configuration,@EnableAutoConfiguration et @ComponentScan avec leurs attributs par défaut.

Voir aussi:

35
répondu Shaheer 2018-07-05 20:22:26

L'un des principaux avantages de la botte de printemps est son annotation pilotée par rapport aux configurations xml traditionnelles, @EnableAutoConfiguration configure automatiquement L'application Spring en fonction de ses fichiers jar inclus, il configure par défaut ou helper en fonction des dépendances dans pom.XML. L'auto-configuration est habituellement appliquée en fonction de classpath et des haricots définis. Par conséquent, nous n'avons pas besoin de définir l'une des sources de données, EntityManagerFactory, TransactionManager etc et magiquement basé sur le classpath, Spring Boot crée automatiquement les bons haricots et les enregistre pour nous. Par exemple quand il y a un tomcat intégré.jar sur votre chemin de classe vous avez probablement besoin D'un Tomcatembeddedservetcontainerfactory (à moins que vous n'ayez défini votre propre bean Embeddedservetcontainerfactory). @EnableAutoConfiguration a un attribut exclu pour désactiver explicitement une auto-configuration sinon nous pouvons simplement l'exclure du pom.xml, par exemple si nous ne voulons pas que Spring configure le tomcat exclut alors spring-bootstarter-tomcat de spring-boot-starter-web.

@ComponentScan fournit la possibilité pour le balayage de composant de ressort, il va tout simplement par le paquet de base fourni et prend en charge les dépendances requises par @Bean ou @Autowired etc, dans une application de printemps typique, @ComponentScan est utilisé dans une classe de configuration, celle annotée avec @Configuration. Les classes de Configuration contiennent des méthodes annotées avec @Bean. Ces @ Bean les méthodes annotées produisent des haricots gérés par conteneur de printemps. Ces haricots seront auto-détectés par @ ComponentScan annotation. Il y a quelques annotations qui rendent les haricots auto-détectables comme @Repository , @Service, @Controller, @Configuration, @Component. Dans le code ci-dessous commence le balayage de ressort du Paquet 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();
  }

}
5
répondu ShayneR 2017-11-03 13:51:03

@SpringBootApplication l'annotation est équivalente à l'utilisation de @Configuration, @EnableAutoConfiguration, et @ComponentScan avec leurs attributs par défaut L'un des principaux avantages de la botte de printemps est son annotation conduit par rapport à des configurations traditionnelles basées sur xml, @EnableAutoConfiguration configure automatiquement l'application de ressort basé sur ses fichiers jar inclus, il met en place par défaut ou helper basé sur les dépendances dans pom.XML. L'auto-configuration est généralement appliqué sur la base de la classepath et les haricots définis. Par conséquent, nous n'avons pas besoin de définir l'une des sources de données, EntityManagerFactory, TransactionManager etc et magiquement basé sur classpath, Spring Boot crée automatiquement des fèves appropriées et les enregistre pour nous. Par exemple quand il y a un tomcat intégré.jar sur votre chemin de classe vous avez probablement besoin D'un Tomcatembeddedservetcontainerfactory (à moins que vous n'ayez défini votre propre bean Embeddedservetcontainerfactory). @EnableAutoConfiguration a un attribut exclu pour désactiver explicitement une auto-configuration sinon nous pouvons simplement l'exclure du pom.xml, par exemple si nous ne voulons pas que Spring configure le tomcat alors exclure spring-bootstarter-tomcat de spring-boot-starter-web.

@ ComponentScan fournit la possibilité pour le balayage de composant de ressort, il va simplement à travers le paquet de base fourni et ramasse les dépendances exigées par @Bean ou @Autowired etc, dans une application de ressort typique, @ComponentScan est utilisé dans un les classes de configuration, celles annotées avec @Configuration. Les classes de Configuration contiennent des méthodes annotées avec @Bean. Ces @ Bean annotated méthodes produisent des haricots gérés par conteneur de printemps. Ces haricots seront auto-détectés par @ ComponentScan annotation. Il y a quelques annotations qui rendent les haricots auto-détectables comme @Repository , @Service, @Controller, @Configuration, @Component. Dans le code ci-dessous commence le balayage de ressort du Paquet y compris la classe BeanA.

0
répondu Mohit Singh 2018-06-18 17:09:58