En hurtig guide til foråret @ Lazy Annotation

1. Oversigt

Som standard opretter Spring alle singleton bønner ivrigt ved opstart / bootstrapping af applikationens kontekst. Årsagen bag dette er enkel: at undgå og opdage alle mulige fejl med det samme i stedet for ved kørsel.

Der er dog tilfælde, hvor vi har brug for at oprette en bønne, ikke ved opstart af applikationskonteksten, men når vi anmoder om det.

I denne hurtige vejledning skal vi diskutere forårets @Doven kommentar.

2. Lazy initialisering

Det @Doven kommentar har været til stede siden forår version 3.0. Der er flere måder at fortælle IoC-beholderen om at initialisere en bønne doven.

2.1. @Konfiguration Klasse

Når vi sætter @Doven kommentar over @Konfiguration klasse, indikerer det, at alle metoderne med @Bønne annotering skal indlæses dovent.

Dette svarer til de XML-baserede konfigurationer standard-doven-init ="rigtigt attribut.

Lad os se her:

@Lazy @Configuration @ComponentScan (basePackages = "com.baeldung.lazy") offentlig klasse AppConfig {@Bean public Region getRegion () {return new Region (); } @Bean public Country getCountry () {returner nyt land (); }}

Lad os nu teste funktionaliteten:

@Test offentlig ugyldighed givenLazyAnnotation_whenConfigClass_thenLazyAll () {AnnotationConfigApplicationContext ctx = ny AnnotationConfigApplicationContext (); ctx.register (AppConfig.class); ctx.refresh (); ctx.getBean (Region.class); ctx.getBean (Country.class); }

Som vi ser, oprettes alle bønner kun, når vi beder dem om for første gang:

Bønnefabrik til ... AnnotationConfigApplicationContext: ... DefaultListableBeanFactory: [...]; // applikationskontekst startet Region bønne initialiseret Land bønne initialiseret

For at anvende dette på kun en bestemt bønne, lad os fjerne @Doven fra en klasse.

Derefter føjer vi det til konfigurationen af ​​den ønskede bønne:

@Bean @Lazy (sand) offentlig Region getRegion () {returner ny region (); }

2.2 Med @Autowired

Inden du går videre, skal du tjekke disse vejledninger til @Autowired og @Komponent kommentarer.

Her, for at initialisere en doven bønne henviser vi til den fra en anden.

Bønnen, som vi vil lægge doven:

@Lazy @Komponent offentlig klasse By {offentlig by () {System.out.println ("Bybøn initialiseret"); }}

Og det er reference:

offentlig klasse Region {@Lazy @Autowired privat byby; public Region () {System.out.println ("Region bean initialised"); } public City getCityInstance () {return city; }}

Bemærk, at @Doven er obligatorisk begge steder.

Med @Komponent kommentar på By klasse og mens der henvises til det med @Autowired:

@Test offentligt ugyldigt givenLazyAnnotation_whenAutowire_thenLazyBean () {// load ctx appication context Region region = ctx.getBean (Region.class); region.getCityInstance (); }

Her, det By bønne initialiseres kun, når vi kalder getCityInstance () metode.

3. Konklusion

I denne hurtige vejledning lærte vi det grundlæggende i Spring's @Doven kommentar. Vi undersøgte flere måder at konfigurere og bruge det på.

Som sædvanlig er den komplette kode til denne vejledning tilgængelig på GitHub.


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