Rövid útmutató a tavaszi @Lazy kommentárhoz

1. Áttekintés

Alapértelmezés szerint a Spring minden egyes babot lelkesen hoz létre az alkalmazáskörnyezet indításakor / indításakor. Ennek oka egyszerű: elkerülni és észlelni az összes lehetséges hibát azonnal, nem pedig futás közben.

Vannak azonban esetek, amikor babot kell létrehoznunk, nem az alkalmazás kontextusának indításakor, hanem amikor azt kérjük.

Ebben a gyors bemutatóban a Spring-et fogjuk megvitatni @Lusta annotáció.

2. Lusta inicializálás

A @Lusta az annotáció a 3.0 tavaszi verzió óta van jelen. Többféleképpen lehet megmondani az IoC-tárolónak, hogy lustán inicializálja a babot.

2.1. @ Konfiguráció Osztály

Amikor feltesszük @Lusta felirat a @ Konfiguráció osztály, azt jelzi, hogy az összes módszer a @Bab az annotációt lustán kell betölteni.

Ez egyenértékű az XML alapú konfigurációkkal alapértelmezett-lusta-init ="igaz tulajdonság.

Vessünk egy pillantást ide:

@Lazy @Configuration @ComponentScan (basePackages = "com.baeldung.lazy") public class AppConfig {@Bean public region getRegion () {return new Region (); } @Bean public Country getCountry () {return new Country (); }}

Most teszteljük a funkcionalitást:

@Test public void givenLazyAnnotation_whenConfigClass_thenLazyAll () {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (); ctx.register (AppConfig.class); ctx.refresh (); ctx.getBean (Régió.osztály); ctx.getBean (Ország.osztály); }

Mint látjuk, az összes bab csak akkor jön létre, amikor először kérjük őket:

Babgyár az ... AnnotationConfigApplicationContext: ... DefaultListableBeanFactory: [...]; // alkalmazáskörnyezet elindítva Region bean inicializált Ország bean inicializálva

Ha ezt csak egy adott babra akarjuk alkalmazni, távolítsuk el a @Lusta osztályból.

Ezután hozzáadjuk a kívánt bab konfigurációjához:

@Bean @Lazy (true) public region getRegion () {return new Region (); }

2.2 @Autowired

Mielőtt továbblépne, olvassa el ezeket az útmutatókat @Autowired és @Összetevő annotációk.

Itt, egy lusta bab inicializálása érdekében egy másikból hivatkozunk rá.

A bab, amelyet lustán be akarunk tölteni:

@Lazy @ Component public class City {public City () {System.out.println ("A város babja inicializálva"); }}

És ez referencia:

nyilvános osztály Régió {@Lazy @Autowired magánváros város; public Region () {System.out.println ("A régió babja inicializálva"); } public City getCityInstance () {visszatérő város; }}

Ne feledje, hogy a @Lusta mindkét helyen kötelező.

A ... val @Összetevő kommentár a Város osztály és azzal hivatkozva @Autowired:

@Test public void givenLazyAnnotation_whenAutowire_thenLazyBean () {// betölti a ctx alkalmazás környezetét Region region = ctx.getBean (Region.class); region.getCityInstance (); }

Itt, a Város A babot csak akkor inicializáljuk, amikor a getCityInstance () módszer.

3. Következtetés

Ebben a gyors bemutatóban megtanultuk a Spring's alapjait @Lusta annotáció. Megvizsgáltuk a konfigurálásának és használatának számos módját.

Szokás szerint az útmutató teljes kódja elérhető a GitHub oldalon.


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