Kratki vodič za proljetno bilježenje @ lijeno
1. Pregled
Prema zadanim postavkama Spring stvara sve singleton grah nestrpljivo pri pokretanju / pokretanju konteksta aplikacije. Razlog tome je jednostavan: izbjegavanje i otkrivanje svih mogućih pogrešaka odmah, a ne tijekom izvođenja.
Međutim, postoje slučajevi kada trebamo stvoriti grah, ne prilikom pokretanja konteksta aplikacije, već kada to zatražimo.
U ovom brzom vodiču razgovarat ćemo o Springu @Lijen bilješka.
2. Lijena inicijalizacija
The @Lijen napomena prisutna je od proljetne verzije 3.0. Postoji nekoliko načina kako reći IoC spremniku da lijeno inicijalizira grah.
2.1. @Konfiguracija Razred
Kad stavimo @Lijen bilješka nad @Konfiguracija klase, označava da su sve metode s @Grah napomenu treba lijeno učitati.
To je ekvivalent za XML konfiguracije zadani-lijeni-init ="pravi“ atribut.
Pogledajmo ovdje:
@Lazy @Configuration @ComponentScan (basePackages = "com.baeldung.lazy") javna klasa AppConfig {@Bean public Region getRegion () {return new Region (); } @Bean public Country getCountry () {return new Country (); }}
Isprobajmo sada funkcionalnost:
@Test javna praznina givenLazyAnnotation_whenConfigClass_thenLazyAll () {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (); ctx.register (AppConfig.class); ctx.refresh (); ctx.getBean (Region.class); ctx.getBean (Country.class); }
Kao što vidimo, svi grah stvara se samo kad ga zatražimo prvi put:
Tvornica graha za ... AnnotationConfigApplicationContext: ... DefaultListableBeanFactory: [...]; // pokrenut je kontekst aplikacije Bean inicijaliziran Bean Region Inicijaliziran Bean Country
Da bismo to primijenili samo na određeni grah, uklonimo @Lijen iz razreda.
Zatim ga dodamo u konfiguraciju željenog graha:
@Bean @Lazy (true) public Region getRegion () {return new Region (); }
2.2 sa @Autowired
Prije nego što nastavite, pogledajte ove vodiče za @Autowired i @Komponenta bilješke.
Ovdje, kako bismo inicijalizirali lijeni grah, upućujemo ga na drugi.
Grah koji želimo lijeno utovariti:
@Lazy @Component javna klasa City {public City () {System.out.println ("Gradski grah je inicijaliziran"); }}
I to je referenca:
javna klasa Regija {@Lazy @Autowired privatni grad; public Region () {System.out.println ("Inicijaliziran grah regije"); } public City getCityInstance () {return city; }}
Imajte na umu da @Lijen je obavezna na oba mjesta.
Uz @Komponenta bilješka na Grad razreda i dok ga referencira s @Autowired:
@Test javna praznina givenLazyAnnotation_whenAutowire_thenLazyBean () {// učitavanje konteksta aplikacije ctx Region region = ctx.getBean (Region.class); region.getCityInstance (); }
Ovdje, the Grad bean se inicijalizira samo kada pozovemo getCityInstance () metoda.
3. Zaključak
U ovom smo brzom uputstvu naučili osnove Spring'sa @Lijen bilješka. Ispitali smo nekoliko načina kako ga konfigurirati i koristiti.
Kao i obično, cjeloviti kôd ovog vodiča dostupan je na GitHubu.