Forskjellen mellom @ComponentScan og @EnableAutoConfiguration i Spring Boot

1. Introduksjon

I denne raske opplæringen lærer vi om forskjellene mellom @ComponentScan og @EnableAutoConfiguration merknader i vårrammen.

2. Vårkommentarer

Kommentarer gjør det lettere å konfigurere avhengighetsinjeksjonen om våren. I stedet for å bruke XML-konfigurasjonsfiler, kan vi bruke Spring Bean-merknader på klasser og metoder for å definere bønner. Etter det konfigurerer og administrerer vår IoC-beholder bønnene.

Her er en oversikt over kommentarene vi skal diskutere i denne artikkelen:

  • @ComponentScan skanner etter merkede fjærkomponenter
  • @EnableAutoConfiguration brukes til å aktivere automatisk konfigurasjon

La oss nå se på forskjellen mellom disse to kommentarene.

3. Hvordan de er forskjellige

Hovedforskjellen mellom disse kommentarene er at @ComponentScan skanner etter vårkomponenter mens @EnableAutoConfiguration brukes til automatisk konfigurering av bønner som er tilstede på klassestien i Spring Boot-applikasjoner.

La oss nå gå gjennom dem mer detaljert.

3.1. @ComponentScan

Mens vi utvikler en applikasjon, må vi fortelle Spring-rammeverket å se etter vårstyrte komponenter. @ComponentScan gjør det mulig for Spring å søke etter ting som konfigurasjoner, kontrollere, tjenester og andre komponenter vi definerer.

Spesielt den @ComponentScankommentar brukes med @Konfigurasjon kommentar for å spesifisere pakken for våren for å skanne etter komponenter:

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

Alternativt kan Spring også begynne å skanne fra den spesifiserte pakken, som vi kan definere ved hjelp av basePackageClasses () eller basePackages (). Hvis ingen pakke er spesifisert, vurderer den pakken til klassen som erklærer @ComponentScan kommentar som startpakke:

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

I eksemplet vil Spring skanne helsevesen og ansatt pakker og Lærer klasse for komponenter.

Spring søker i de spesifiserte pakkene sammen med alle delpakker etter klasser merket med @Konfigurasjon. I tillegg, de Konfigurasjon klasser kan inneholde @Bønne merknader, som registrerer metodene som bønner i vårapplikasjonssammenheng. Etter det, @ComponentScan merknader kan automatisk oppdage slike bønner:

@Configuration public class Hospital {@Bean public Doctor getDoctor () {return new Doctor (); }}

Videre er @ComponentScan merknader kan også skanne, oppdage og registrere bønner for klasser som er merket med @Komponent, @Kontroller, @Service, og @Oppbevaringssted.

For eksempel kan vi lage en Ansatt klasse som en komponent som kan skannes av @ComponentScan kommentar:

@Component ("ansatt") offentlig klasse ansatt {// ...}

3.2. @EnableAutoConfiguration

De @EnableAutoConfiguration merknader gjør at Spring Boot kan konfigurere applikasjonskonteksten automatisk. Derfor oppretter og registrerer den automatisk bønner basert på både de inkluderte jar-filene i klassestien og bønnene som er definert av oss.

For eksempel når vi definerer spring-boot-starter-web avhengighet i klassestien vår, konfigurerer Spring Boot automatisk Tomcat og Spring MVC. Imidlertid har denne autokonfigurasjonen mindre forrang i tilfelle vi definerer våre egne konfigurasjoner.

Pakken til klassen som erklærer @EnableAutoConfiguration merknader betraktes som standard. Derfor bør vi alltid bruke @EnableAutoConfiguration kommentar i rotpakken slik at alle underpakker og klasser kan undersøkes:

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

Videre er den @EnableAutoConfiguration kommentar gir to parametere for å manuelt ekskludere alle parametere:

Vi kan bruke utelukke for å deaktivere en liste over klasser som vi ikke ønsker å konfigureres automatisk:

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

Vi kan bruke ekskluder Navn for å definere en fullt kvalifisert liste over klassenavn som vi vil ekskludere fra den automatiske konfigurasjonen:

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

Siden Spring Boot 1.2.0 kan vi bruke @SpringBootApplication kommentar, som er en kombinasjon av de tre kommentarene @Configuration, @EnableAutoConfiguration, og@ComponentScan med standardattributtene:

@SpringBootApplication offentlig klasse EmployeeApplication {public static void main (String [] args) {ApplicationContext context = SpringApplication.run (EmployeeApplication.class, args); // ...}}

4. Konklusjon

I denne artikkelen lærte vi om forskjellene mellom @ComponentScan og @EnableAutoConfiguration i Spring Boot.

Som alltid er koden for disse eksemplene tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found