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.