Verschil tussen @ComponentScan en @EnableAutoConfiguration in Spring Boot

1. Inleiding

In deze korte tutorial leren we over de verschillen tussen @BuienRadarNL en @EnableAutoConfiguration annotaties in het Spring Framework.

2. Lente-aantekeningen

Annotaties maken het eenvoudiger om de afhankelijkheidsinjectie in Spring te configureren. In plaats van XML-configuratiebestanden te gebruiken, kunnen we Spring Bean-annotaties gebruiken voor klassen en methoden om bonen te definiëren. Daarna configureert en beheert de Spring IoC-container de bonen.

Hier is een overzicht van de annotaties die we in dit artikel gaan bespreken:

  • @BuienRadarNL scant op geannoteerde veercomponenten
  • @EnableAutoConfiguration wordt gebruikt om de autoconfiguratie in te schakelen

Laten we nu eens kijken naar het verschil tussen deze twee annotaties.

3. Hoe ze verschillen

Het belangrijkste verschil tussen deze annotaties is dat @BuienRadarNL scant naar Spring-componenten terwijl @EnableAutoConfiguration wordt gebruikt voor het automatisch configureren van bonen die aanwezig zijn in het klassenpad in Spring Boot-toepassingen.

Laten we ze nu in meer detail bekijken.

3.1. @BuienRadarNL

Bij het ontwikkelen van een applicatie moeten we het Spring-framework vertellen om te zoeken naar door Spring beheerde componenten. @BuienRadarNL stelt Spring in staat te scannen op zaken als configuraties, controllers, services en andere componenten die we definiëren.

In het bijzonder de @BuienRadarNLannotatie wordt gebruikt met @Configuratie annotatie om het pakket te specificeren dat Spring naar componenten moet scannen:

@Configuration @ComponentScan openbare klasse EmployeeApplication {openbare statische leegte hoofd (String [] args) {ApplicationContext context = SpringApplication.run (EmployeeApplication.class, args); // ...}}

Als alternatief kan Spring ook beginnen met scannen vanuit het opgegeven pakket, dat we kunnen definiëren met basePackageClasses () of basePackages (). Als er geen pakket is opgegeven, beschouwt het het pakket van de klasse waarin het @BuienRadarNL annotatie als het startpakket:

pakket com.baeldung.annotations.componentscanautoconfigure; // ... @Configuration @ComponentScan (basePackages = {"com.baeldung.annotations.componentscanautoconfigure.healthcare", "com.baeldung.annotations.componentscanautoconfigure.employee"}, basePackageClasses = Teacher.class) public class EmployeeApplication {public static void main (String [] args) {ApplicationContext context = SpringApplication.run (EmployeeApplication.class, args); // ...}}

In het voorbeeld scant Spring het gezondheidszorg en werknemer pakketten en de Leraar klasse voor componenten.

Spring doorzoekt de gespecificeerde pakketten samen met al zijn subpakketten naar klassen die zijn geannoteerd met @Configuratie. Bovendien, de Configuratie klassen kunnen @Boon annotaties, die de methoden registreren als bonen in de Spring-toepassingscontext. Daarna de @ComponentScan annotatie kan dergelijke bonen automatisch detecteren:

@Configuratie openbare klas Ziekenhuis {@Bean openbare dokter getDoctor () {retourneer nieuwe dokter (); }}

Bovendien is de @ComponentScan annotatie kan ook bonen scannen, detecteren en registreren voor klassen die zijn geannoteerd met @Component, @Controller, @Service, en @Repository.

We kunnen bijvoorbeeld een Werknemer klasse als een component die kan worden gescand door de @ComponentScan annotatie:

@Component ("werknemer") openbare klasse Medewerker {// ...}

3.2. @EnableAutoConfiguration

De @EnableAutoConfiguration annotatie stelt Spring Boot in staat om de applicatiecontext automatisch te configureren. Daarom maakt en registreert het automatisch bonen op basis van zowel de meegeleverde jar-bestanden in het klassenpad als de door ons gedefinieerde bonen.

Als we bijvoorbeeld de spring-boot-starter-web afhankelijkheid in ons klassenpad, configureert Spring boot automatisch Tomcat en Spring MVC. Deze autoconfiguratie heeft echter minder voorrang als we onze eigen configuraties definiëren.

Het pakket van de klas waarin de @EnableAutoConfiguration annotatie wordt als standaard beschouwd. Daarom moeten we altijd de @EnableAutoConfiguration annotatie in het root-pakket zodat elk subpakket en elke klasse kan worden onderzocht:

@Configuration @EnableAutoConfiguration openbare klasse EmployeeApplication {openbare statische leegte hoofd (String [] args) {ApplicationContext context = SpringApplication.run (EmployeeApplication.class, args); // ...}}

Bovendien is de @EnableAutoConfiguration annotatie biedt twee parameters om handmatig elke parameter uit te sluiten:

We kunnen gebruiken uitsluiten om een ​​lijst met klassen uit te schakelen waarvan we niet willen dat ze automatisch worden geconfigureerd:

@Configuration @EnableAutoConfiguration (exclude = {JdbcTemplateAutoConfiguration.class}) public class EmployeeApplication {public static void main (String [] args) {ApplicationContext context = SpringApplication.run (EmployeeApplication.class, args); // ...}}

We kunnen gebruiken excludeName om een ​​volledig gekwalificeerde lijst met klassenamen te definiëren die we willen uitsluiten van de automatische configuratie:

@Configuration @EnableAutoConfiguration (excludeName = {"org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration"}) public class EmployeeApplication {public static void main (String [] args) {ApplicationContext context = SpringApplication.run (EmployeeApplication.run (EmployeeApplication.run) (EmployeeApplication.run) ); // ...}}

Sinds Spring Boot 1.2.0 kunnen we de @SpringBootApplication annotatie, wat een combinatie is van de drie annotaties @Configuratie, @EnableAutoConfiguration, en@BuienRadarNL met hun standaardattributen:

@SpringBootApplication openbare klasse EmployeeApplication {openbare statische leegte hoofd (String [] args) {ApplicationContext context = SpringApplication.run (EmployeeApplication.class, args); // ...}}

4. Conclusie

In dit artikel hebben we geleerd over de verschillen tussen @BuienRadarNL en @EnableAutoConfiguration in Spring Boot.

Zoals altijd is de code voor deze voorbeelden beschikbaar op GitHub.