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.