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.