欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring的Aware接口你知道多少

 更新時(shí)間:2022年02月14日 17:17:20   作者:JavaEdge.  
這篇文章主要為大家詳細(xì)介紹了Spring的Aware接口,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

若 Spring 檢測到 bean 實(shí)現(xiàn)了 Aware 接口,則會為其注入相應(yīng)的依賴。所以通過讓bean 實(shí)現(xiàn) Aware 接口,則能在 bean 中獲得相應(yīng)的 Spring 容器資源。

Spring 中提供的 Aware 接口有:

  • BeanNameAware:注入當(dāng)前 bean 對應(yīng) beanName
  • BeanClassLoaderAware:注入加載當(dāng)前 bean 的 ClassLoader
  • BeanFactoryAware:注入 當(dāng)前BeanFactory容器 的引用

BeanNameAwareBeanFactoryAware都屬于org.springframework.beans.factory.Aware根標(biāo)記接口。

其使用setter注入來在應(yīng)用程序上下文啟動期間獲取對象。

Aware接口是回調(diào),監(jiān)聽器和觀察者設(shè)計(jì)模式的混合,它表示bean有資格通過回調(diào)方式被Spring容器通知。

1 BeanNameAware

使對象能夠知道容器中定義的bean名稱。

public class MyBeanName implements BeanNameAware {
    @Override
    public void setBeanName(String beanName) {
        System.out.println(beanName);
    }
}

beanName屬性表示在Spring容器中注冊的bean id,在我們的實(shí)現(xiàn)中,只是顯示bean名稱。

在Spring配置類中注冊這種類型的bean:

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

啟動應(yīng)用程序上下文并從中獲取bean:

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

setBeanName方法打印出了“myCustomBeanName”。

若從@Bean注解中刪除name =“…”代碼,則在這種情況下,將getMyBeanName()方法名稱分配給bean,所以輸出將是“getMyBeanName”。

2 BeanFactoryAware

用于注入BeanFactory對象,就能訪問創(chuàng)建對象的BeanFactory。

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

在setBeanFactory()方法的幫助下,我們將IoC容器中的BeanFactory引用分配給beanFactory屬性。

然后,我們可以像在getMyBeanName()函數(shù)中一樣直接使用它。

初始化MyBeanFactory并調(diào)用getMyBeanName()方法:

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

由于我們已經(jīng)在前面的示例中實(shí)例化了MyBeanName類,因此Spring將在此處調(diào)用現(xiàn)有實(shí)例。

3 適用場景

獲取bean名稱以進(jìn)行日志記錄或埋點(diǎn),對于BeanFactoryAware,它可以使用擴(kuò)展代碼中的spring bean。

大多數(shù)情況下,應(yīng)避免使用任何Aware接口,因?yàn)閷?shí)現(xiàn)這些接口會將代碼耦合到Spring框架。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容! 

相關(guān)文章

  • java實(shí)現(xiàn)發(fā)送郵箱驗(yàn)證碼

    java實(shí)現(xiàn)發(fā)送郵箱驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)發(fā)送郵箱驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • springBoot項(xiàng)目如何實(shí)現(xiàn)啟動多個(gè)實(shí)例

    springBoot項(xiàng)目如何實(shí)現(xiàn)啟動多個(gè)實(shí)例

    這篇文章主要介紹了springBoot項(xiàng)目如何實(shí)現(xiàn)啟動多個(gè)實(shí)例的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java網(wǎng)絡(luò)編程之簡單的服務(wù)端客戶端應(yīng)用實(shí)例

    Java網(wǎng)絡(luò)編程之簡單的服務(wù)端客戶端應(yīng)用實(shí)例

    這篇文章主要介紹了Java網(wǎng)絡(luò)編程之簡單的服務(wù)端客戶端應(yīng)用,以實(shí)例形式較為詳細(xì)的分析了java網(wǎng)絡(luò)編程的原理與服務(wù)器端客戶端的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • Springmvc ajax跨域請求處理方法實(shí)例詳解

    Springmvc ajax跨域請求處理方法實(shí)例詳解

    這篇文章主要介紹了Springmvc ajax跨域請求處理方法實(shí)例詳解,需要的朋友可以參考下
    2017-10-10
  • lambdaQueryWrapper多條件嵌套查詢方式

    lambdaQueryWrapper多條件嵌套查詢方式

    這篇文章主要介紹了lambdaQueryWrapper多條件嵌套查詢方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • Java8優(yōu)雅的字符串拼接工具類StringJoiner實(shí)例代碼

    Java8優(yōu)雅的字符串拼接工具類StringJoiner實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Java8優(yōu)雅的字符串拼接工具類StringJoiner的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Java中Builder模式的實(shí)現(xiàn)詳解

    Java中Builder模式的實(shí)現(xiàn)詳解

    在設(shè)計(jì)模式中對Builder模式的定義是用于構(gòu)建復(fù)雜對象的一種模式,所構(gòu)建的對象往往需要多步初始化或賦值才能完成。下面這篇文章主要給大家介紹了在Java各個(gè)版本中Builder模式實(shí)現(xiàn)的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考學(xué)習(xí)。
    2017-05-05
  • 解決SecureRandom.getInstanceStrong()引發(fā)的線程阻塞問題

    解決SecureRandom.getInstanceStrong()引發(fā)的線程阻塞問題

    這篇文章主要介紹了解決SecureRandom.getInstanceStrong()引發(fā)的線程阻塞問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java的“Goto”與標(biāo)簽及使用詳解

    Java的“Goto”與標(biāo)簽及使用詳解

    goto在Java中是一個(gè)保留字,但在語言中并沒有用到它;Java沒有g(shù)oto。接下來通過本文給大家介紹Java的“Goto”與標(biāo)簽,感興趣的朋友跟隨小編一起看看吧
    2018-10-10
  • 為什么Spring和IDEA都不推薦使用 @Autowired 注解

    為什么Spring和IDEA都不推薦使用 @Autowired 注解

    本文主要介紹了為什么Spring和IDEA都不推薦使用 @Autowired 注解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評論