最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring的Aware接口你知道多少

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

若 Spring 檢測到 bean 實現了 Aware 接口,則會為其注入相應的依賴。所以通過讓bean 實現 Aware 接口,則能在 bean 中獲得相應的 Spring 容器資源。

Spring 中提供的 Aware 接口有:

  • BeanNameAware:注入當前 bean 對應 beanName
  • BeanClassLoaderAware:注入加載當前 bean 的 ClassLoader
  • BeanFactoryAware:注入 當前BeanFactory容器 的引用

BeanNameAwareBeanFactoryAware都屬于org.springframework.beans.factory.Aware根標記接口。

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

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

1 BeanNameAware

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

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

beanName屬性表示在Spring容器中注冊的bean id,在我們的實現中,只是顯示bean名稱。

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

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

啟動應用程序上下文并從中獲取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()函數中一樣直接使用它。

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

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

由于我們已經在前面的示例中實例化了MyBeanName類,因此Spring將在此處調用現有實例。

3 適用場景

獲取bean名稱以進行日志記錄或埋點,對于BeanFactoryAware,它可以使用擴展代碼中的spring bean。

大多數情況下,應避免使用任何Aware接口,因為實現這些接口會將代碼耦合到Spring框架。

總結

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

相關文章

  • JavaFX實現界面跳轉

    JavaFX實現界面跳轉

    這篇文章主要為大家詳細介紹了JavaFX實現界面跳轉,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java并發(fā)編程示例(七):守護線程的創(chuàng)建和運行

    Java并發(fā)編程示例(七):守護線程的創(chuàng)建和運行

    這篇文章主要介紹了Java并發(fā)編程示例(七):守護線程的創(chuàng)建和運行,在本節(jié)示例中,我們將創(chuàng)建兩個線程,一個是普通線程,向隊列中寫入事件,另外一個是守護線程,清除隊列中的事件,需要的朋友可以參考下
    2014-12-12
  • java如何使用redis加鎖

    java如何使用redis加鎖

    這篇文章主要介紹了java如何使用redis加鎖問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • JPA?@ManyToMany?報錯StackOverflowError的解決

    JPA?@ManyToMany?報錯StackOverflowError的解決

    這篇文章主要介紹了JPA?@ManyToMany?報錯StackOverflowError的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 在Java中使用redisTemplate操作緩存的方法示例

    在Java中使用redisTemplate操作緩存的方法示例

    這篇文章主要介紹了在Java中使用redisTemplate操作緩存的方法示例,在Redis中可以存儲String、List、Set、Hash、Zset。感興趣的可以了解一下
    2019-01-01
  • SpringBoot使用統(tǒng)一異常處理詳解

    SpringBoot使用統(tǒng)一異常處理詳解

    這篇文章主要為大家詳細介紹了SpringBoot使用統(tǒng)一異常處理,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • springboot整合knife4j全過程

    springboot整合knife4j全過程

    這篇文章主要介紹了springboot整合knife4j全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java中的動態(tài)代理原理及實現

    Java中的動態(tài)代理原理及實現

    這篇文章主要介紹了Java中的動態(tài)代理原理及實現,動態(tài)是相對于靜態(tài)而言,何為靜態(tài),即編碼時手動編寫代理類、委托類,而動態(tài)呢,是不編寫具體實現類,等到使用時,動態(tài)創(chuàng)建一個來實現代理的目的,需要的朋友可以參考下
    2023-12-12
  • 詳解Java如何有效避免空指針

    詳解Java如何有效避免空指針

    空指針,也就是NullPointerException 簡稱NPE的,怕一下子寫出NPE,部分的伙伴看不懂,索性就改成了空指針,在實際的開發(fā)中,我們最討厭的就是遇到空指針了,業(yè)務跑著跑著發(fā)現了空指針,所以本文詳細介紹了Java如何有效的避免空指針,需要的朋友可以參考下
    2023-12-12
  • java實現單機版五子棋

    java實現單機版五子棋

    這篇文章主要為大家詳細介紹了java實現單機版五子棋源碼,以及五子棋游戲需要的實現,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評論

河间市| 乌兰浩特市| 陆丰市| 汾阳市| 浦县| 内丘县| 工布江达县| 呼玛县| 察雅县| 潍坊市| 长海县| 安阳县| 肇庆市| 新龙县| 长阳| 临颍县| 江永县| 上林县| 乌恰县| 盐城市| 晋城| 汤原县| 高平市| 侯马市| 凤翔县| 若尔盖县| 瓮安县| 察雅县| 高安市| 上虞市| 冀州市| 泸州市| 濮阳市| 望江县| 保山市| 明光市| 永靖县| 湘阴县| 浮山县| 黄平县| 沧源|