Rozhrania BeanNameAware a BeanFactoryAware na jar

1. Prehľad

V tomto rýchlom návode zameriame sa na BeanNameAware a BeanFactoryAware rozhrania v jarnom rámci.

Každé rozhranie popíšeme osobitne s výhodami a nevýhodami ich použitia.

2. Vedomý Rozhranie

Oboje BeanNameAware a BeanFactoryAware patrí do org.springframework.beans.factory.Aware rozhranie koreňových značiek. Toto využíva vstrekovanie setra na získanie objektu počas spustenia kontextu aplikácie.

The Vedomý rozhranie je zmesou návrhových vzorov spätného volania, poslucháča a pozorovateľa. Znamená to, že fazuľa je spôsobilá na to, aby bola informovaná kontajnerom Spring prostredníctvom metód spätného volania.

3. BeanNameAware

BeanNameAware dáva objektu vedomosť o názve fazule definovanom v kontajneri.

Pozrime sa na príklad:

verejná trieda MyBeanName implementuje BeanNameAware {@Override public void setBeanName (reťazec beanName) {System.out.println (beanName); }}

The beanName property predstavuje identifikáciu fazule zaregistrovanú v kontajneri Spring. V našej implementácii jednoducho zobrazujeme názov fazule.

Ďalej zaregistrujeme fazuľu tohto typu v konfiguračnej triede Spring:

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

Tu sme výslovne priradili meno nášmu MyBeanName trieda s @Bean (meno = „MyCustomBeanName“) riadok.

Teraz môžeme spustiť kontext aplikácie a získať z nej fazuľa:

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

Ako očakávame, setBeanName metóda sa vytlačí „MyCustomBeanName“.

Ak odstránime name = “…” kód z @Bean anotáciu, ktorú kontajner v tomto prípade priradí getMyBeanName () názov metódy do fazule. Takže výstup bude „GetMyBeanName“.

4. BeanFactoryAware

BeanFactoryAware sa používa na injekciu BeanFactory objekt. Týmto spôsobom získame prístup k BeanFactory ktorý objekt vytvoril.

Tu je príklad a MyBeanFactory trieda:

verejná trieda MyBeanFactory implementuje BeanFactoryAware {private BeanFactory beanFactory; @Override public void setBeanFactory (BeanFactory beanFactory) hodí BeansException {this.beanFactory = beanFactory; } public void getMyBeanName () {MyBeanName myBeanName = beanFactory.getBean (MyBeanName.class); System.out.println (beanFactory.isSingleton ("myCustomBeanName")); }}

S pomocou setBeanFactory () metóda, priradíme BeanFactory odkaz z kontajnera IoC na vlastnosť beanFactory.

Potom ho môžeme použiť priamo ako v getMyBeanName () funkcie.

Poďme inicializovať MyBeanFactory a zavolajte na getMyBeanName () metóda:

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

Ako sme už uviedli MyBeanName triedy v predchádzajúcom príklade, Spring tu vyvolá existujúcu inštanciu.

The beanFactory.isSingleton („myCustomBeanName“) riadok to overuje.

5. Kedy použiť?

Typický prípad použitia pre BeanNameAware by mohlo byť získanie názvu fazule na účely prihlásenia alebo zapojenia. Pre BeanFactoryAware mohla by to byť schopnosť použiť jarnú fazuľu z pôvodného kódu.

Vo väčšine prípadov by sme sa mali vyhnúť použitiu niektorého z týchto nástrojov Vedomý rozhrania, pokiaľ ich nepotrebujeme. Implementácia týchto rozhraní spojí kód s jarným rámcom.

6. Záver

V tomto písaní sme sa dozvedeli o BeanNameAware a BeanFactoryAware rozhrania a ako ich v praxi využívať.

Úplný kód tohto článku je ako obvykle k dispozícii na serveri GitHub.


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