BeanNameAware og BeanFactoryAware-grensesnitt om våren

1. Oversikt

I denne raske opplæringen, vi skal fokusere på BeanNameAware og BeanFactoryAware grensesnitt, i Spring Framework.

Vi beskriver hvert grensesnitt separat med fordeler og ulemper ved bruken av dem.

2. Klar over Grensesnitt

Både BeanNameAware og BeanFactoryAware tilhører org.springframework.beans.factory.Aware rotmarkørgrensesnitt. Dette bruker setterinjeksjon for å få et objekt under oppstart av applikasjonssammenheng.

De Klar over grensesnitt er en blanding av tilbakeringing, lytter og observatør designmønstre. Det indikerer at bønnen er kvalifisert for å bli varslet av Spring container gjennom tilbakeringingsmetodene.

3. BeanNameAware

BeanNameAware gjør objektet oppmerksom på bønnenavnet som er definert i beholderen.

La oss se på et eksempel:

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

De beanName eiendommen representerer bønne-ID-en registrert i vårcontaineren. I implementeringen vår viser vi ganske enkelt bønnenavnet.

La oss deretter registrere en bønne av denne typen i en vårkonfigurasjonsklasse:

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

Her har vi eksplisitt tildelt et navn til vårt MyBeanName klasse med @Bean (navn = “MyCustomBeanName”) linje.

Nå kan vi starte applikasjonskonteksten og få bønnen fra den:

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

Som vi forventer, setBeanName metoden skrives ut “MyCustomBeanName”.

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

4. BeanFactoryAware

BeanFactoryAware brukes til å injisere BeanFactory gjenstand. På denne måten får vi tilgang til BeanFactory som skapte objektet.

Her er et eksempel på en MyBeanFactory klasse:

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

Ved hjelp av setBeanFactory () metode tildeler vi BeanFactory referanse fra IoC-beholderen til beanFactory eiendom.

Etter det kan vi bruke den direkte som i getMyBeanName () funksjon.

La oss initialisere MyBeanFactory og ring getMyBeanName () metode:

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

Som vi allerede har instantiert MyBeanName klasse i forrige eksempel, vil Spring påkalle den eksisterende forekomsten her.

De beanFactory.isSingleton (“myCustomBeanName”) linje verifiserer det.

5. Når skal jeg bruke?

Den typiske brukssaken for BeanNameAware kan være å skaffe bønnenavnet for logging eller ledningsformål. For BeanFactoryAware det kan være muligheten til å bruke en vårbønne fra eldre kode.

I de fleste tilfeller bør vi unngå å bruke noe av Klar over grensesnitt, med mindre vi trenger dem. Implementering av disse grensesnittene vil koble koden til vårens rammeverk.

6. Konklusjon

I denne oppskriften lærte vi om BeanNameAware og BeanFactoryAware grensesnitt og hvordan du bruker dem i praksis.

Som vanlig er den komplette koden for denne artikkelen tilgjengelig på GitHub.


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