BeanNameAware i BeanFactoryAware sučelja u proljeće

1. Pregled

U ovom brzom vodiču, usredotočit ćemo se na BeanNameAware i BeanFactoryAware sučelja, u Proljetnom okviru.

Opisat ćemo svako sučelje zasebno s prednostima i nedostacima njihove upotrebe.

2. Svjestan Sučelje

Oba BeanNameAware i BeanFactoryAware pripadaju org.springframework.beans.factory.Aware korijensko sučelje markera. To koristi injekciju postavljača da bi se dobio objekt tijekom pokretanja konteksta aplikacije.

The Svjestan sučelje je kombinacija obrazaca dizajna povratnog poziva, slušatelja i promatrača. Označava da grah ispunjava uvjete da ga Spring Spring spremnik obavijesti metodama povratnog poziva.

3. BeanNameAware

BeanNameAware čini objekt svjesnim imena graha definiranog u spremniku.

Pogledajmo primjer:

javna klasa MyBeanName implementira BeanNameAware {@Override public void setBeanName (String beanName) {System.out.println (beanName); }}

The grahName svojstvo predstavlja ID graha registriran u spremniku Spring. U našoj implementaciji jednostavno prikazujemo naziv graha.

Dalje, registrirajmo grah ove vrste u klasi konfiguracije Spring:

@Configuration javna klasa Config {@Bean (name = "myCustomBeanName") public MyBeanName getMyBeanName () {return new MyBeanName (); }}

Ovdje smo izričito dodijelili ime našem MyBeanName razred s @Bean (ime = "MyCustomBeanName") crta.

Sada možemo pokrenuti kontekst aplikacije i dobiti grah iz njega:

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

Kao što i očekujemo, setBeanName metoda ispisuje "MyCustomBeanName".

Ako uklonimo name = "..." kod iz @Grah napomena koju spremnik, u ovom slučaju, dodjeljuje getMyBeanName () naziv metode u grah. Dakle, izlaz će biti "GetMyBeanName".

4. BeanFactoryAware

BeanFactoryAware koristi se za ubrizgavanje BeanFactory objekt. Na ovaj način dobivamo pristup BeanFactory koja je stvorila objekt.

Evo primjera a MyBeanFactory razred:

javna klasa MyBeanFactory implementira BeanFactoryAware {private BeanFactory beanFactory; @Override public void setBeanFactory (BeanFactory beanFactory) baca BeansException {this.beanFactory = beanFactory; } javna praznina getMyBeanName () {MyBeanName myBeanName = beanFactory.getBean (MyBeanName.class); System.out.println (beanFactory.isSingleton ("myCustomBeanName")); }}

Uz pomoć setBeanFactory () metodu, dodjeljujemo BeanFactory referenca iz IoC spremnika na svojstvo beanFactory.

Nakon toga, možemo ga koristiti izravno kao u getMyBeanName () funkcija.

Inicirajmo MyBeanFactory i nazovite getMyBeanName () metoda:

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

Kao što smo već napravili MyBeanName klase u prethodnom primjeru, Spring će ovdje pozvati postojeću instancu.

The beanFactory.isSingleton (“myCustomBeanName”) linija to potvrđuje.

5. Kada koristiti?

Tipični slučaj upotrebe za BeanNameAware može stjecanje naziva zrna za bilježenje ili ožičenje. Za BeanFactoryAware to bi mogla biti sposobnost upotrebe proljetnog graha iz naslijeđenog koda.

U većini slučajeva trebali bismo izbjegavati upotrebu bilo kojeg od Svjestan sučelja, osim ako ih ne trebamo. Implementacija ovih sučelja spojit će kôd s Springovim okvirom.

6. Zaključak

U ovom tekstu saznali smo o BeanNameAware i BeanFactoryAware sučelja i kako ih koristiti u praksi.

Kao i obično, cjeloviti kôd za ovaj članak dostupan je na GitHubu.