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.