Was ist der Unterschied zwischen @ComponentScan
und @EnableAutoConfiguration
Anmerkungen in Spring Boot? Ist es notwendig, diese hinzuzufügen? Meine Anwendung funktioniert ohne diese Anmerkungen sehr gut. Ich möchte nur verstehen, warum wir sie hinzufügen müssen.
java
spring
spring-mvc
spring-boot
e2rabi
quelle
quelle
@SpringBootApplication
? Das ist ein Ersatz für die beiden, die Sie erwähnt haben@ComponentScan
@EnableAutoConfiguration
Um nach Ihren kommentierten Spring-Komponenten zu suchen, werden die kostenlosen Goodies (Konfigurationen, aktivierte Komponenten usw.) von Spring Boot aktiviert.@SprintBootApplication
Mit dieser Option können Sie eine einzelne Anmerkung anstelle einiger häufig verwendeter Anmerkungen verwenden, wie die beiden von Ihnen genannten. Schauen Sie sich denAntworten:
@EnableAutoConfiguration
Durch die Annotation wird Spring Boot angewiesen, anhand der von Ihnen hinzugefügten JAR-Abhängigkeiten zu "erraten", wie Sie Spring konfigurieren möchten. Wenn sich HSQLDB beispielsweise in Ihrem Klassenpfad befindet und Sie keine Datenbankverbindungs-Beans manuell konfiguriert haben, konfiguriert Spring automatisch eine speicherinterne Datenbank.@ComponentScan
Weist Spring an, nach anderen Komponenten, Konfigurationen und Diensten im angegebenen Paket zu suchen. Spring kann Ihre Beans oder Komponenten aus einem vordefinierten Projektpaket automatisch scannen, erkennen und registrieren. Wenn kein Paket angegeben ist, wird das aktuelle Klassenpaket als Stammpaket verwendet.Wenn Sie Spring Boot benötigen, um alles automatisch für Sie zu konfigurieren,
@EnableAutoConfiguration
ist dies erforderlich. Sie müssen es nicht manuell hinzufügen. Spring fügt es basierend auf der von Ihnen bereitgestellten Anmerkung intern für Sie hinzu.Tatsächlich ist die
@SpringBootApplication
ist Annotation entspricht der Verwendung@Configuration
,@EnableAutoConfiguration
und@ComponentScan
mit ihren Standardattributen.Siehe auch:
quelle
Einer der Hauptvorteile von Spring Boot ist die Annotation im Vergleich zu herkömmlichen XML-basierten Konfigurationen, @EnableAutoConfiguration Konfiguriert die Spring-Anwendung automatisch basierend auf den enthaltenen JAR-Dateien. Sie richtet Standardeinstellungen oder Hilfsprogramme basierend auf den Abhängigkeiten in pom.xml ein. Die automatische Konfiguration wird normalerweise basierend auf dem Klassenpfad und den definierten Beans angewendet. Daher müssen wir keine DataSource, EntityManagerFactory, TransactionManager usw. definieren. Auf magische Weise basierend auf dem Klassenpfad erstellt Spring Boot automatisch die richtigen Beans und registriert sie für uns. Wenn sich beispielsweise in Ihrem Klassenpfad eine tomcat-embedded.jar befindet, benötigen Sie wahrscheinlich eine TomcatEmbeddedServletContainerFactory (es sei denn, Sie haben Ihre eigene EmbeddedServletContainerFactory-Bean definiert). @EnableAutoConfiguration hat ein exclude-Attribut, um eine automatische Konfiguration explizit zu deaktivieren, andernfalls können wir sie einfach aus der pom.xml ausschließen.
@ComponentScan bietet Spielraum für das Scannen von Federkomponenten. Es durchläuft einfach das bereitgestellte Basispaket und greift die für @Bean oder @Autowired usw. erforderlichen Abhängigkeiten auf. In einer typischen Spring-Anwendung wird @ComponentScan in Konfigurationsklassen verwendet, die mit @ versehen sind Aufbau. Konfigurationsklassen enthalten mit @Bean annotierte Methoden. Diese mit @ Bean kommentierten Methoden generieren Beans, die vom Spring-Container verwaltet werden. Diese Beans werden durch die Annotation @ComponentScan automatisch erkannt. Es gibt einige Anmerkungen, die Beans automatisch erkennbar machen, z. B. @Repository, @Service, @Controller, @Configuration, @Component. Im folgenden Code beginnt Spring mit dem Scannen aus dem Paket einschließlich der BeanA-Klasse.
@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(); } }
quelle
@EnableAutoConfiguration
In Spring Boot gibt an, wie Sie Spring konfigurieren möchten, basierend auf den Jars, die Sie in Ihrem Klassenpfad hinzugefügt haben. Wenn Sie beispielsweisespring-boot-starter-web
Ihrem Klassenpfad Abhängigkeiten hinzufügen , werden Tomcat und Spring MVC automatisch konfiguriert.Sie können
@EnableAutoConfiguration
Annotation zusammen mit@Configuration
Annotation verwenden. Es hat zwei optionale Elemente,Beispiele:
@Configuration @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) public class MyConfiguration { } @EnableAutoConfiguration(excludeName = {"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration"}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
@SpringBootApplication
ist eine neuere Version,@EnableAutoConfiguration
die in Spring Boot 1.2 eingeführt wurde.@SpringBootApplication
ist eine Kombination aus drei Anmerkungen,@Configuration
- für Java-basierte Konfigurationsklassen.@ComponentScan
- Um das Scannen von Komponenten zu aktivieren, werden alle Pakete und Unterpakete automatisch gescannt, die sich unter dem Stammpaket befinden, auf das @SpringBootApplication angewendet wird.@EnableAutoConfiguration
- um die automatische Konfiguration derKlassen zu aktivieren, basiert auf den im Klassenpfad hinzugefügten Gläsern.
@ComponentScan
Aktiviert das Scannen von Komponenten, sodass Webcontroller-Klassen und andere von Ihnen erstellte Komponenten im Anwendungskontext von Spring automatisch erkannt und als Beans registriert werden. Sie können die Basispakete angeben, die zur automatischen Erkennung und Registrierung von Beans gescannt werden.Eines der optionalen Elemente ist:
Beispiel,
@ComponentScan(basePackages = {"com.example.test"}) @Configuration public class SpringConfiguration { }
quelle