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

Spring?Aware接口示例代碼詳解

 更新時間:2022年02月11日 10:18:38   作者:JavaEdge.  
Spring的依賴注入的最大亮點(diǎn)是所有的Bean對Spring容器的存在是沒有意識的,我們可以將Spring容器換成其他的容器,Spring容器中的Bean的耦合度因此也是極低的,本文給大家介紹Spring?Aware接口示例代碼詳解,感興趣的朋友一起看看吧

若 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容器 的引用

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

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

Aware接口是回調(diào),監(jiān)聽器和觀察者設(shè)計模式的混合,它表示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:

nnotationConfigApplicationContext 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框架。

到此這篇關(guān)于Spring Aware接口詳解的文章就介紹到這了,更多相關(guān)Spring Aware接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot使用Value注解給靜態(tài)變量賦值的方法

    Spring Boot使用Value注解給靜態(tài)變量賦值的方法

    這篇文章主要介紹了Spring Boot使用Value注解給靜態(tài)變量賦值的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Java?SE封裝、包、static關(guān)鍵字和代碼塊示例詳解

    Java?SE封裝、包、static關(guān)鍵字和代碼塊示例詳解

    這篇文章主要給大家介紹了關(guān)于Java?SE封裝、包、static關(guān)鍵字和代碼塊的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • Java實(shí)現(xiàn)將byte[]轉(zhuǎn)換為File對象

    Java實(shí)現(xiàn)將byte[]轉(zhuǎn)換為File對象

    這篇文章將通過一個簡單的例子為大家演示Java如何實(shí)現(xiàn) byte[] 轉(zhuǎn)換為 File 對象,并將其上傳到外部服務(wù)器,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • MyBatis+Calcite實(shí)現(xiàn)多數(shù)據(jù)庫SQL自動適配的詳細(xì)指南

    MyBatis+Calcite實(shí)現(xiàn)多數(shù)據(jù)庫SQL自動適配的詳細(xì)指南

    在當(dāng)今企業(yè)IT環(huán)境中,數(shù)據(jù)庫異構(gòu)性已成為常態(tài),根據(jù)DB-Engines最新調(diào)研,超過78%的企業(yè)同時使用兩種以上數(shù)據(jù)庫系統(tǒng),所以本文就來為大家介紹一下如何基于MyBatis+Calcite實(shí)現(xiàn)多數(shù)據(jù)庫SQL自動適配吧
    2025-04-04
  • Java序列化機(jī)制詳解

    Java序列化機(jī)制詳解

    Java 序列化機(jī)制是一種將對象轉(zhuǎn)換為字節(jié)流的過程,以便在網(wǎng)絡(luò)上傳輸或保存到文件中,并能在需要時將字節(jié)流還原為對象,這一機(jī)制通過實(shí)現(xiàn) java.io.Serializable 接口來實(shí)現(xiàn),同時涉及到一些關(guān)鍵概念和注意事項(xiàng),需要的朋友可以參考下
    2023-12-12
  • 在Java中使用日志框架log4j的方法

    在Java中使用日志框架log4j的方法

    Log4j有三個主要的組件/對象:Loggers(記錄器),Appenders (輸出源)和Layouts(布局)。這里可簡單理解為日志類別,日志要輸出的地方和日志以何種形式輸出,今天通過本文給大家分享Java日志框架log4j的相關(guān)知識,感興趣的朋友一起看看吧
    2021-08-08
  • Spring boot2X Consul如何使用Feign實(shí)現(xiàn)服務(wù)調(diào)用

    Spring boot2X Consul如何使用Feign實(shí)現(xiàn)服務(wù)調(diào)用

    這篇文章主要介紹了spring boot2X Consul如何使用Feign實(shí)現(xiàn)服務(wù)調(diào)用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • MyBatis批量插入幾千條數(shù)據(jù)為何慎用foreach

    MyBatis批量插入幾千條數(shù)據(jù)為何慎用foreach

    這篇文章主要介紹了MyBatis批量插入幾千條數(shù)據(jù)為何慎用foreach問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java使用Socket簡單通訊詳解

    Java使用Socket簡單通訊詳解

    這篇文章主要介紹了Java使用Socket簡單通訊詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java8新特性 StreamAPI實(shí)例詳解

    Java8新特性 StreamAPI實(shí)例詳解

    這篇文章主要為大家介紹了Java8新特性 StreamAPI實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11

最新評論

滨州市| 澄城县| 安阳市| 凌海市| 城口县| 霍邱县| 宝鸡市| 新野县| 巴马| 漳州市| 拉孜县| 黎川县| 平塘县| 晋中市| 黎城县| 平潭县| 怀远县| 惠州市| 苍梧县| 长沙市| 招远市| 习水县| 邵阳县| 万盛区| 绥江县| 沈丘县| 黔江区| 新密市| 嘉祥县| 安远县| 无锡市| 黄龙县| 卢氏县| 青河县| 昆明市| 玉环县| 吉水县| 绥德县| 苏尼特左旗| 闻喜县| 大悟县|