Een beknopte handleiding voor de Spring @Lazy-annotatie
1. Overzicht
Standaard creëert Spring gretig alle singleton beans bij het opstarten / opstarten van de toepassingscontext. De reden hiervoor is simpel: om alle mogelijke fouten onmiddellijk te vermijden en op te sporen in plaats van tijdens runtime.
Er zijn echter gevallen waarin we een bean moeten maken, niet bij het opstarten van de toepassingscontext, maar wanneer we daarom vragen.
In deze korte tutorial gaan we de lente bespreken @Lui annotatie.
2. Luie initialisatie
De @Lui annotatie is aanwezig sinds Spring versie 3.0. Er zijn verschillende manieren om de IoC-container te vertellen om lui een boon te initialiseren.
2.1. @Configuratie Klasse
Toen we zetten @Lui annotatie over de @Configuratie class, geeft het aan dat alle methoden met @Boon annotatie moet lui worden geladen.
Dit is het equivalent voor de op XML gebaseerde configuraties standaard-lui-init ="Waar“ attribuut.
Laten we eens kijken:
@Lazy @Configuration @ComponentScan (basePackages = "com.baeldung.lazy") openbare klasse AppConfig {@Bean openbare regio getRegion () {retourneer nieuwe regio (); } @Bean openbaar land getCountry () {retourneer nieuw land (); }}
Laten we nu de functionaliteit testen:
@Test openbare leegte gegevenLazyAnnotation_whenConfigClass_thenLazyAll () {AnnotationConfigApplicationContext ctx = nieuwe AnnotationConfigApplicationContext (); ctx.register (AppConfig.class); ctx.refresh (); ctx.getBean (Region.class); ctx.getBean (Country.class); }
Zoals we zien, worden alle bonen alleen gemaakt als we ze voor de eerste keer aanvragen:
Bean factory voor ... AnnotationConfigApplicationContext: ... DefaultListableBeanFactory: [...]; // toepassingscontext gestart Regioboon geïnitialiseerd Landboon geïnitialiseerd
Om dit alleen op een specifieke boon toe te passen, verwijderen we de @Lui uit een klas.
Vervolgens voegen we het toe aan de configuratie van de gewenste boon:
@Bean @Lazy (true) openbare regio getRegion () {retourneer nieuwe regio (); }
2.2 Met @Autowired
Bekijk voordat u verder gaat deze handleidingen voor @Autowired en @Component annotaties.
Hier, om een luie boon te initialiseren, verwijzen we ernaar vanuit een andere.
De boon die we lui willen laden:
@Lazy @Component openbare klasse Stad {openbare stad () {System.out.println ("Stadsboon geïnitialiseerd"); }}
En het is een referentie:
openbare klasse Regio {@Lazy @Autowired privé stad stad; public Region () {System.out.println ("Region bean geïnitialiseerd"); } openbare stad getCityInstance () {terugkeer stad; }}
Merk op dat de @Lui is op beide plaatsen verplicht.
Met de @Component annotatie op de stad class en terwijl er naar wordt verwezen met @Autowired:
@Test openbare leegte gegevenLazyAnnotation_whenAutowire_thenLazyBean () {// laad ctx appication context Regio regio = ctx.getBean (Region.class); region.getCityInstance (); }
Hier, de stad bean wordt alleen geïnitialiseerd als we de getCityInstance () methode.
3. Conclusie
In deze korte tutorial hebben we de basis van Spring geleerd @Lui annotatie. We hebben verschillende manieren onderzocht om het te configureren en te gebruiken.
Zoals gewoonlijk is de volledige code voor deze handleiding beschikbaar op GitHub.