BeanNameAware og BeanFactoryAware-grænseflader om foråret

1. Oversigt

I denne hurtige vejledning vi vil fokusere på BeanNameAware og BeanFactoryAware grænseflader i Spring Framework.

Vi beskriver hver grænseflade separat med fordele og ulemper ved deres brug.

2. Klar over Interface

Begge BeanNameAware og BeanFactoryAware hører til org.springframework.beans.factory.Aware rodmarkørgrænseflade. Dette bruger setterinjektion for at få et objekt under opstart af applikationskonteksten.

Det Klar over interface er en blanding af callback, lytter og observatør design mønstre. Det indikerer, at bønnen er berettiget til at blive underrettet af Spring container via tilbagekaldsmetoderne.

3. BeanNameAware

BeanNameAware gør objektet opmærksom på det bønnenavn, der er defineret i beholderen.

Lad os se på et eksempel:

offentlig klasse MyBeanName implementerer BeanNameAware {@Override public void setBeanName (String beanName) {System.out.println (beanName); }}

Det beanName egenskab repræsenterer bønne-id'et registreret i Spring container. I vores implementering viser vi simpelthen bønnenavnet.

Lad os derefter registrere en bønne af denne type i en Spring-konfigurationsklasse:

@Configuration public class Config {@Bean (name = "myCustomBeanName") public MyBeanName getMyBeanName () {returner nyt MyBeanName (); }}

Her har vi eksplicit tildelt et navn til vores MyBeanName klasse med @Bean (navn = “MyCustomBeanName”) linje.

Nu kan vi starte applikationskonteksten og få bønnen fra den:

AnnotationConfigApplicationContext context = ny AnnotationConfigApplicationContext (Config.class); MyBeanName myBeanName = context.getBean (MyBeanName.class);

Som vi forventer, setBeanName metode udskrives “MyCustomBeanName”.

Hvis vi fjerner navn = “…” kode fra @Bønne annotering containeren, i dette tilfælde, tildeler getMyBeanName () metode navn i bønnen. Så output vil være “GetMyBeanName”.

4. BeanFactoryAware

BeanFactoryAware bruges til at injicere BeanFactory objekt. På denne måde får vi adgang til BeanFactory som skabte objektet.

Her er et eksempel på en MyBeanFactory klasse:

offentlig klasse MyBeanFactory implementerer BeanFactoryAware {private BeanFactory beanFactory; @ Override offentlig ugyldighed setBeanFactory (BeanFactory beanFactory) kaster BeansException {this.beanFactory = beanFactory; } offentligt ugyldigt getMyBeanName () {MyBeanName myBeanName = beanFactory.getBean (MyBeanName.class); System.out.println (beanFactory.isSingleton ("myCustomBeanName")); }}

Ved hjælp af setBeanFactory () metode tildeler vi BeanFactory henvisning fra IoC-containeren til beanFactory ejendom.

Derefter kan vi bruge det direkte som i getMyBeanName () fungere.

Lad os initialisere MyBeanFactory og ring til getMyBeanName () metode:

MyBeanFactory myBeanFactory = context.getBean (MyBeanFactory.class); myBeanFactory.getMyBeanName ();

Som vi allerede har instantificeret MyBeanName klasse i det foregående eksempel, vil Spring påkalde den eksisterende instans her.

Det beanFactory.isSingleton (“myCustomBeanName”) linje bekræfter det.

5. Hvornår skal jeg bruge?

Den typiske brugssag til BeanNameAware kunne være at erhverve bønnenavnet til logning eller ledningsføringsformål. Til BeanFactoryAware det kunne være evnen til at bruge en springbønne fra den ældre kode.

I de fleste tilfælde bør vi undgå at bruge noget af Klar over grænseflader, medmindre vi har brug for dem. Implementering af disse grænseflader vil koble koden til Spring-rammen.

6. Konklusion

I denne opskrivning lærte vi om BeanNameAware og BeanFactoryAware grænseflader og hvordan man bruger dem i praksis.

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


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