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

Spring?Aware接口示例代碼詳解

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

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

Spring 中提供的 Aware 接口有:

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

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

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

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

1 BeanNameAware

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

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

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

在Spring配置類中注冊(cè)這種類型的bean:

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

啟動(dòng)應(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對(duì)象,就能訪問(wèn)創(chuàng)建對(duì)象的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 適用場(chǎng)景

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

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

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

相關(guān)文章

  • SpringBoot讀取配置文件常用方法解析

    SpringBoot讀取配置文件常用方法解析

    這篇文章主要介紹了SpringBoot讀取配置文件常用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Jenkins自動(dòng)化打包為war包

    Jenkins自動(dòng)化打包為war包

    這篇文章主要介紹了Jenkins自動(dòng)化打包為war包,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java利用LocalDate類實(shí)現(xiàn)日歷設(shè)計(jì)

    Java利用LocalDate類實(shí)現(xiàn)日歷設(shè)計(jì)

    java中做時(shí)間處理時(shí)一般會(huì)采用java.util.Date,但是相比于Date來(lái)說(shuō),還有更好的選擇--java.time.LocalDate。本文就來(lái)用LocalDate類實(shí)現(xiàn)日歷設(shè)計(jì),感興趣的可以動(dòng)手嘗試一下
    2022-07-07
  • JavaWeb文件上傳入門教程

    JavaWeb文件上傳入門教程

    這篇文章主要為大家詳細(xì)介紹了JavaWeb文件上傳入門教程,分析了文件上傳原理、介紹了第三方上傳組件,感興趣的小伙伴們可以參考一下
    2016-06-06
  • FasfDFS整合Java實(shí)現(xiàn)文件上傳下載功能實(shí)例詳解

    FasfDFS整合Java實(shí)現(xiàn)文件上傳下載功能實(shí)例詳解

    這篇文章主要介紹了FasfDFS整合Java實(shí)現(xiàn)文件上傳下載功能實(shí)例詳解,需要的朋友可以參考下
    2017-08-08
  • Java?JDBC使用入門講解

    Java?JDBC使用入門講解

    JDBC是指Java數(shù)據(jù)庫(kù)連接,是一種標(biāo)準(zhǔn)Java應(yīng)用編程接口(?JAVA?API),用來(lái)連接?Java?編程語(yǔ)言和廣泛的數(shù)據(jù)庫(kù)。從根本上來(lái)說(shuō),JDBC?是一種規(guī)范,它提供了一套完整的接口,允許便攜式訪問(wèn)到底層數(shù)據(jù)庫(kù),本篇文章我們來(lái)了解MySQL連接JDBC的流程方法
    2022-12-12
  • Java字符串詳解的實(shí)例介紹

    Java字符串詳解的實(shí)例介紹

    本篇文章介紹了,在Java中關(guān)于字符串詳解一些實(shí)例操作,需要的朋友參考下
    2013-04-04
  • SpringBoot中利用AOP和攔截器實(shí)現(xiàn)自定義注解

    SpringBoot中利用AOP和攔截器實(shí)現(xiàn)自定義注解

    本文將通過(guò)攔截器+AOP實(shí)現(xiàn)自定義注解,在這里攔截器充當(dāng)在指定注解處要執(zhí)行的方法,aop負(fù)責(zé)將攔截器的方法和要注解生效的地方做一個(gè)織入,感興趣的可以嘗試一下
    2022-06-06
  • 深入了解java8的foreach循環(huán)

    深入了解java8的foreach循環(huán)

    雖然java8出來(lái)很久了,但是之前用的一直也不多,最近正好學(xué)習(xí)了java8。下面給大家分享java8中的foreach循環(huán),感興趣的朋友一起看看吧
    2017-05-05
  • java判斷是否空最簡(jiǎn)單的方法

    java判斷是否空最簡(jiǎn)單的方法

    在本篇文章里小編給大家整理的一篇關(guān)于java判斷是否空最簡(jiǎn)單的方法,有興趣的讀者們可以參考下。
    2019-12-12

最新評(píng)論