En rask guide til våren @ Lazy Annotation
1. Oversikt
Som standard oppretter Spring alle singletonbønner ivrig ved oppstart / bootstrapping av applikasjonskonteksten. Årsaken bak dette er enkel: å unngå og oppdage alle mulige feil umiddelbart i stedet for ved kjøretid.
Imidlertid er det tilfeller når vi trenger å lage en bønne, ikke ved oppstart av applikasjonssammenheng, men når vi ber om det.
I denne raske opplæringen skal vi diskutere vårens @Lat kommentar.
2. Lat initialisering
De @Lat merknader har vært til stede siden vårversjon 3.0. Det er flere måter å fortelle IoC-beholderen å initialisere en bønne lat.
2.1. @Konfigurasjon Klasse
Når vi legger @Lat kommentar over @Konfigurasjon klasse, indikerer det at alle metodene med @Bønne merknader bør lastes lat.
Dette tilsvarer XML-baserte konfigurasjoner standard-lat-init ="ekte“ Egenskap.
La oss ta en titt her:
@Lazy @Configuration @ComponentScan (basePackages = "com.baeldung.lazy") offentlig klasse AppConfig {@Bean public Region getRegion () {return new Region (); } @Bean public Country getCountry () {return new Country (); }}
La oss nå teste funksjonaliteten:
@Test offentlig ugyldig givenLazyAnnotation_whenConfigClass_thenLazyAll () {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (); ctx.register (AppConfig.class); ctx.refresh (); ctx.getBean (Region.class); ctx.getBean (Country.class); }
Som vi ser, opprettes alle bønner bare når vi ber om dem for første gang:
Bønnefabrikk for ... AnnotationConfigApplicationContext: ... DefaultListableBeanFactory: [...]; // applikasjonskontekst startet Region bønne initialisert Land bønne initialisert
For å bruke dette på bare en bestemt bønne, la oss fjerne @Lat fra en klasse.
Deretter legger vi det til konfigurasjonen til ønsket bønne:
@Bean @Lazy (true) public Region getRegion () {return new Region (); }
2.2 Med @Autowired
Før du går videre, sjekk ut disse guidene for @Autowired og @Komponent kommentarer.
Her, For å initialisere en lat bønne, refererer vi til den fra en annen.
Bønnen som vi vil legge lat:
@Lazy @Component offentlig klasse City {public City () {System.out.println ("City bean initialized"); }}
Og det er referanse:
offentlig klasse Region {@Lazy @Autowired private City city; public Region () {System.out.println ("Region bean initialized"); } offentlig by getCityInstance () {retur by; }}
Merk at @Lat er obligatorisk begge steder.
Med @Komponent kommentar på By klasse og mens du refererer til den med @Autowired:
@Test offentlig ugyldighet gittLazyAnnotation_whenAutowire_thenLazyBean () {// laste opp ctx appication kontekst Region region = ctx.getBean (Region.class); region.getCityInstance (); }
Her, de By bønne initialiseres bare når vi kaller getCityInstance () metode.
3. Konklusjon
I denne raske opplæringen lærte vi det grunnleggende om Spring's @Lat kommentar. Vi undersøkte flere måter å konfigurere og bruke den på.
Som vanlig er den komplette koden for denne guiden tilgjengelig på GitHub.