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.