Razlika između @ComponentScan i @EnableAutoConfiguration u Spring Boot

1. Uvod

U ovom brzom vodiču naučit ćemo o razlikama između @ComponentScan i @EnableAutoConfiguration bilješke u Proljetnom okviru.

2. Proljetne bilješke

Bilješke olakšavaju konfiguriranje ubrizgavanja ovisnosti u proljeće. Umjesto da koristimo XML konfiguracijske datoteke, možemo upotrijebiti bilješke Spring Bean na klasama i metodama za definiranje graha. Nakon toga, Spring IoC spremnik konfigurira i upravlja grahom.

Evo pregleda napomena o kojima ćemo razgovarati u ovom članku:

  • @ComponentScan skenira komentirane proljetne komponente
  • @EnableAutoConfiguration koristi se za omogućavanje automatske konfiguracije

Pogledajmo sada razliku između ove dvije bilješke.

3. Kako se razlikuju

Glavna razlika između ovih bilješki je ta @ComponentScan skenira komponente Spring, dok @EnableAutoConfiguration koristi se za automatsko konfiguriranje graha koji je prisutan u stazi predavanja u Spring Boot aplikacijama.

Sada ćemo ih detaljnije pregledati.

3.1. @ComponentScan

Dok razvijamo aplikaciju, moramo Spring Springu reći da traži komponente kojima upravlja Spring. @ComponentScan omogućuje Springu da pretražuje stvari poput konfiguracija, kontrolera, usluga i drugih komponenata koje definiramo.

Konkretno, @ComponentScankoristi se napomena sa @Konfiguracija napomena za specificiranje paketa za Spring za skeniranje komponenata:

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

Alternativno, Spring također može započeti skeniranje iz navedenog paketa, koji možemo definirati pomoću basePackageClasses () ili basePackages (). Ako nije naveden nijedan paket, tada uzima u obzir paket klase koji deklarira @ComponentScan napomena kao početni paket:

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

U primjeru će Spring skenirati zdravstvo i zaposlenik paketi i Učitelj, nastavnik, profesor razred za komponente.

Spring pretražuje navedene pakete zajedno sa svim svojim podpaketima za klase označene s @Konfiguracija. Dodatno, the Konfiguracija razredi mogu sadržavati @Grah napomene, koje metode registriraju kao grah u kontekstu aplikacije Spring. Nakon toga, @Skeniranje komponenata anotacija može automatski otkriti takav grah:

@Configuration javna bolnica {@Bean public Doctor getDoctor () {return new Doctor (); }}

Nadalje, @Skeniranje komponenata anotacija također može skenirati, otkriti i registrirati grah za klase označene s @Component, @Controller, @Service, i @ Repozitorij.

Na primjer, možemo stvoriti Zaposlenik klasa kao komponenta koju može skenirati @Skeniranje komponenata napomena:

@Component ("zaposlenik") zaposlenik u javnoj klasi {// ...}

3.2. @EnableAutoConfiguration

The @EnableAutoConfiguration napomena omogućuje Spring Boot-u da automatski konfigurira kontekst aplikacije. Stoga automatski kreira i registrira grah na temelju i uključenih jar datoteka u putu predavanja i graha koje smo definirali.

Na primjer, kada definiramo proljeće-boot-starter-web ovisnost u našem putu do razreda, Spring boot automatski konfigurira Tomcat i Spring MVC. Međutim, ova automatska konfiguracija ima manje prednosti u slučaju da definiramo vlastite konfiguracije.

Paket klase koji proglašava @EnableAutoConfiguration bilješka se smatra zadanom. Stoga bismo uvijek trebali primijeniti @EnableAutoConfiguration napomena u root paketu tako da se mogu ispitati svi podpaketi i klase:

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

Nadalje, @EnableAutoConfiguration napomena pruža dva parametra za ručno izuzimanje bilo kojeg parametra:

Možemo koristiti isključiti da biste onemogućili popis klasa koje ne želimo automatski konfigurirati:

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

Možemo koristiti excludeName da definiramo potpuno kvalificirani popis naziva klasa koje želimo izuzeti iz automatske konfiguracije:

@Configuration @EnableAutoConfiguration (excludeName = {"org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration"}) javna klasa EmployeeApplication {javna statička void glavna (String [] args) {ApplicationContext context = SpringApplicationssn arg. ); // ...}}

Od Spring Boota 1.2.0 možemo koristiti @SpringBootApplication bilješka, koja je kombinacija tri bilješke @Configuration, @EnableAutoConfiguration, i@ComponentScan sa svojim zadanim atributima:

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

4. Zaključak

U ovom smo članku saznali o razlikama između @ComponentScan i @EnableAutoConfiguration u Spring Boot.

Kao i uvijek, kod za ove primjere dostupan je na GitHubu.


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