Stručný sprievodca anotáciou Spring @Lazy

1. Prehľad

V predvolenom nastavení Spring vytvára všetky fazule singleton dychtivo pri štarte / bootstrapovaní kontextu aplikácie. Dôvod je jednoduchý: vyhnúť sa a zistiť všetky možné chyby okamžite a nie za behu.

Existujú však prípady, keď potrebujeme vytvoriť fazuľa, nie pri spustení kontextu aplikácie, ale keď o ňu požiadame.

V tomto rýchlom výučbe budeme diskutovať o jarných @Lazy anotácia.

2. Lenivá inicializácia

The @Lazy anotácia existuje od jari verzie 3.0. Existuje niekoľko spôsobov, ako povedať kontajneru IoC, aby lenivo inicializoval fazuľa.

2.1. @ Konfigurácia Trieda

Keď sme dali @Lazy anotácia nad @ Konfigurácia triedy, znamená to, že všetky metódy s @Bean anotácia by sa mala načítať lenivo.

Toto je ekvivalent pre konfiguráciu založenú na XML default-lenivý-init =„Pravda atribút.

Pozrime sa tu:

@Lazy @Configuration @ComponentScan (basePackages = "com.baeldung.lazy") verejná trieda AppConfig {@Bean public Region getRegion () {return new Region (); } @Bean public Country getCountry () {return new Country (); }}

Poďme teraz otestovať funkčnosť:

@Test public void givenLazyAnnotation_whenConfigClass_thenLazyAll () {AnnotationConfigApplicationContext ctx = nový AnnotationConfigApplicationContext (); ctx.register (AppConfig.class); ctx.refresh (); ctx.getBean (Region.class); ctx.getBean (Country.class); }

Ako vidíme, všetky fazule sú vytvorené iba vtedy, keď o ne požiadame prvýkrát:

Fazulová továreň na ... AnnotationConfigApplicationContext: ... DefaultListableBeanFactory: [...]; // kontext aplikácie spustený Regionálna fazuľa inicializovaná Country bean inicializovaná

Ak to chcete použiť iba na konkrétnu fazuľu, odstráňte @Lazy z triedy.

Potom ho pridáme do konfigurácie požadovanej fazule:

@Bean @Lazy (true) public Region getRegion () {return new Region (); }

2.2 S @Autowired

Predtým, ako začnete, sa pozrite na tieto príručky @Autowired a @ Komponent anotácie.

Tu, aby sme inicializovali lenivú fazuľu, odkazujeme ju na inú.

Fazuľa, ktorú chceme lenivo naložiť:

@Lazy @Component public class City {public City () {System.out.println ("City bean initialized"); }}

A je to odkaz:

oblasť verejnej triedy {@Lazy @Autowired private City city; public Region () {System.out.println ("Inicializovaná fazuľa regiónu"); } public City getCityInstance () {návrat mesto; }}

Upozorňujeme, že @Lazy je povinná na oboch miestach.

Vďaka @ Komponent anotácia k Mesto triedy a zatiaľ čo na ňu odkazuje @Autowired:

@Test public void givenLazyAnnotation_whenAutowire_thenLazyBean () {// načítať kontext aplikácie ctx Region region = ctx.getBean (Region.class); region.getCityInstance (); }

Tu, the Mesto fazuľa sa inicializuje, až keď zavoláme getCityInstance () metóda.

3. Záver

V tomto rýchlom výučbe sme sa naučili základy Spring's @Lazy anotácia. Preskúmali sme niekoľko spôsobov, ako ho nakonfigurovať a používať.

Úplný kód tohto sprievodcu je ako obvykle k dispozícii na serveri GitHub.


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