Rozdiel medzi @ComponentScan a @EnableAutoConfiguration v Spring Boot

1. Úvod

V tomto rýchlom výučbe sa dozvieme o rozdieloch medzi nimi @ComponentScan a @EnableAutoConfiguration anotácie v jarnom rámci.

2. Jarné anotácie

Anotácie uľahčujú konfiguráciu vkladania závislostí na jar. Namiesto použitia konfiguračných súborov XML môžeme na definovanie fazule použiť anotácie Spring Bean pre triedy a metódy. Potom kontajner Spring IoC nakonfiguruje a spravuje fazuľa.

Tu je prehľad anotácií, o ktorých sa budeme v tomto článku baviť:

  • @ComponentScan vyhľadá anotované komponenty pružiny
  • @EnableAutoConfiguration sa používa na povolenie automatickej konfigurácie

Pozrime sa teraz na rozdiel medzi týmito dvoma anotáciami.

3. Ako sa líšia

Hlavný rozdiel medzi týmito anotáciami je v tom @ComponentScan vyhľadá komponenty Spring, zatiaľ čo @EnableAutoConfiguration sa používa na automatickú konfiguráciu fazule prítomnej v ceste triedy v aplikáciách Spring Boot.

Prejdime si ich teraz podrobnejšie.

3.1. @ComponentScan

Pri vývoji aplikácie musíme rámcu Spring povedať, aby hľadal komponenty riadené Springom. @ComponentScan umožňuje Springu vyhľadávať napríklad konfigurácie, ovládače, služby a ďalšie komponenty, ktoré definujeme.

Najmä @ComponentScananotácia sa používa s @ Konfigurácia anotácia na určenie balíka pre Spring na kontrolu komponentov:

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

Alternatívne môže Spring začať skenovať aj zo zadaného balíka, ktorý môžeme definovať pomocou basePackageClasses () alebo basePackages (). Ak nie je zadaný žiadny balík, potom sa vezme do úvahy balík triedy vyhlasujúci @ComponentScan anotácia ako počiatočný balík:

balíček com.baeldung.annotations.componentscanautoconfigure; // ... @Configuration @ComponentScan (basePackages = {"com.baeldung.annotations.componentscanautoconfigure.healthcare", "com.baeldung.annotations.componentscanautoconfigure.employee"}, basePackageClasses = Teacher.class) verejná trieda EmployeeApplication {verejná statická void main (String [] args) {ApplicationContext context = SpringApplication.run (EmployeeApplication.class, args); // ...}}

V príklade Spring prehľadá zdravotná starostlivosť a zamestnanec balíčky a Učiteľ trieda pre komponenty.

Spring vyhľadáva zadané balíčky spolu so všetkými jeho čiastkovými balíčkami pre triedy s poznámkami @ Konfigurácia. Dodatočne, the Konfigurácia triedy môžu obsahovať @Bean anotácie, ktoré registrujú metódy ako fazuľa v kontexte jarnej aplikácie. Potom sa @ComponentScan anotácia môže tieto fazule automaticky zistiť:

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

Ďalej znak @ComponentScan anotácia môže tiež skenovať, detegovať a registrovať fazuľa pre triedy s anotáciou @Component, @Controller, @Servicea @Úložisko.

Môžeme napríklad vytvoriť znak Zamestnanec triedy ako komponent, ktorý je možné skenovať pomocou @ComponentScan anotácia:

@Component ("zamestnanec") verejná trieda Zamestnanec {// ...}

3.2. @EnableAutoConfiguration

The @EnableAutoConfiguration anotácia umožňuje Spring Boot automaticky konfigurovať kontext aplikácie. Preto automaticky vytvára a registruje fazuľa na základe zahrnutých súborov jar v ceste triedy a nami definovaných fazúľ.

Napríklad, keď definujeme spring-boot-starter-web závislosť v našej triede ciest, Spring boot automaticky konfiguruje Tomcat a Spring MVC. Táto automatická konfigurácia má však menšiu prednosť v prípade, že definujeme svoje vlastné konfigurácie.

Balík triedy vyhlasujúci @EnableAutoConfiguration anotácia sa považuje za predvolenú. Preto by sme mali vždy používať @EnableAutoConfiguration anotáciu v koreňovom balíku, aby bolo možné preskúmať všetky čiastkové balíky a triedy:

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

Ďalej @EnableAutoConfiguration anotácia poskytuje dva parametre na manuálne vylúčenie ľubovoľného parametra:

Môžeme použiť vylúčiť deaktivácia zoznamu tried, ktoré nechceme mať automaticky nakonfigurované:

@Configuration @EnableAutoConfiguration (vylúčiť = {JdbcTemplateAutoConfiguration.class}) verejná trieda EmployeeApplication {public static void main (String [] args) {ApplicationContext context = SpringApplication.run (EmployeeApplication.class, args); // ...}}

Môžeme použiť vylúčiťMeno definovať úplný zoznam názvov tried, ktoré chceme vylúčiť z automatickej konfigurácie:

@Configuration @EnableAutoConfiguration (vylúčitName = {"org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration"}) verejná trieda EmployeeApplication {public static void main (String [] args) {ApplicationContext context = SpringApplication.run (Employee) ); // ...}}

Od Spring Boot 1.2.0 môžeme používať @SpringBootApplication anotácia, ktorá je kombináciou troch anotácií @Configuration, @EnableAutoConfiguration, a@ComponentScan s ich predvolenými atribútmi:

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

4. Záver

V tomto článku sme sa dozvedeli o rozdieloch medzi @ComponentScan a @EnableAutoConfiguration v Spring Boot.

Ako vždy, kód týchto príkladov je k dispozícii na GitHub.


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