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

Spring擴(kuò)展點(diǎn)之BeanFactoryPostProcessor詳解

 更新時(shí)間:2023年11月24日 08:57:00   作者:扛麻袋的少年  
這篇文章主要介紹了Spring擴(kuò)展點(diǎn)之BeanFactoryPostProcessor詳解,Spring的設(shè)計(jì)非常優(yōu)雅,有很多的擴(kuò)展點(diǎn)供我們對(duì)項(xiàng)目進(jìn)行擴(kuò)展,今天學(xué)習(xí)一下Spring其中擴(kuò)展點(diǎn)之一的BeanFactoryPostProcessor,需要的朋友可以參考下

BeanFactoryPostProcessor

即:BeanFactory后置處理器,是實(shí)現(xiàn)Spring容器功能擴(kuò)展的又一重要接口。它是對(duì) BeanDefinition對(duì)象進(jìn)行屬性相關(guān)的修改。

例如:修改bean屬性值,實(shí)現(xiàn)bean動(dòng)態(tài)代理等。很多框架都是通過此接口實(shí)現(xiàn)對(duì)spring容器的擴(kuò)展,例如mybatis與spring集成時(shí),只定義了mapper接口,無實(shí)現(xiàn)類,但spring卻可以完成自動(dòng)注入,是不是很神奇? 本文將通過簡單的例子,展現(xiàn)BeanFactoryPostProcessor的擴(kuò)展能力。

說明:BeanDefinition對(duì)象,即:Bean定義對(duì)象,里面存儲(chǔ)著Bean標(biāo)簽的所有信息,Spring就是通過BeanDefintion對(duì)象來生成最終的Bean實(shí)例。

執(zhí)行時(shí)機(jī)

所有的bean定義信息,已經(jīng)被加載到IOC容器中,bean實(shí)例還沒有被初始化時(shí),BeanFactoryPostProcessor被調(diào)用。

即:在bean定義已解決被加載到IOC容器中,還沒有初始化之前,我們可以悄悄的往容器中添加一些東西,進(jìn)行一些小動(dòng)作的修改。

使用

/**
 * TODO 自定義BeanFactoryPostProcessor
 *      執(zhí)行時(shí)間:所有的Bean定義信息已經(jīng)加載到容器中,但是Bean實(shí)例還沒有被初始化.
 *
 * @author : lzb
 * @date: 2021-03-15 17:42
 */
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        System.out.println("IOC 容器調(diào)用了MyBeanFactoryPostProcessor中重寫的postProcessBeanFactory方法");
        for(String name:beanFactory.getBeanDefinitionNames()) {
            if("person".equals(name)) {
                System.out.println("將Person對(duì)象設(shè)置為懶加載");
                BeanDefinition beanDefinition = beanFactory.getBeanDefinition(name);
                beanDefinition.setLazyInit(true);
            }
        }
    }
}

使其生效,有如下兩種方式:

方式一

使用@Configuration + @Bean 方式初始化

/**
 * 定義一個(gè)主配置類,標(biāo)識(shí)為@Configuration,通過@Bean方式初始化,注入IOC容器
 */
@Configuration
public class MainConfig {

	@Bean
	public MyBeanFactoryPostProcessor myBeanFactoryPostProcessor  () {
		return new MyBeanFactoryPostProcessor();
	}
}

方式二

使用@ComponentScan + @Component方式初始化

/**
 * 使用@ComponentScan定義組件掃描包范圍,在可掃描的保范圍內(nèi),
 * 然后使用@Component方式,將其定義為一個(gè)組件初始化,注入IOC容器
 */
@Component
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        System.out.println("IOC 容器調(diào)用了MyBeanFactoryPostProcessor中重寫的postProcessBeanFactory方法");
		// 獲取Bean定義名稱,進(jìn)行遍歷
        for(String name:beanFactory.getBeanDefinitionNames()) {
			// 如果是person對(duì)象
            if("person".equals(name)) { 
                System.out.println("將Person對(duì)象設(shè)置為懶加載");
                // 獲取person的BeanDefinition(Bean定義對(duì)象)
                BeanDefinition beanDefinition = beanFactory.getBeanDefinition(name); 
                // 將Person對(duì)象設(shè)置為懶加載
                beanDefinition.setLazyInit(true);   
            }
        }
    }
}

執(zhí)行結(jié)果

在這里插入圖片描述

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

相關(guān)文章

  • jmeter中json提取器如何提取多個(gè)參數(shù)值

    jmeter中json提取器如何提取多個(gè)參數(shù)值

    關(guān)于jmeter中的正則表達(dá)式及json提取器可以提取響應(yīng)值,但是實(shí)際可以需要上個(gè)接口的多個(gè)響應(yīng)值,本文就詳細(xì)的介紹一下如何使用,感興趣的可以了解一下
    2021-11-11
  • Java算法之桶排序Bucket?Sort詳解

    Java算法之桶排序Bucket?Sort詳解

    這篇文章主要介紹了Java算法之桶排序Bucket?Sort詳解,桶排序(Bucket?Sort)又稱箱排序,是一種比較常用的排序算法,其算法原理是將數(shù)組分到有限數(shù)量的桶里,再對(duì)每個(gè)桶分別排好序,最后一次將每個(gè)桶中排好序的數(shù)輸出,需要的朋友可以參考下
    2023-10-10
  • Groovy的規(guī)則腳本引擎實(shí)例解讀

    Groovy的規(guī)則腳本引擎實(shí)例解讀

    這篇文章主要介紹了Groovy的規(guī)則腳本引擎實(shí)例解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java面向?qū)ο箢惡蛯?duì)象實(shí)例詳解

    Java面向?qū)ο箢惡蛯?duì)象實(shí)例詳解

    面向?qū)ο竽耸荍ava語言的核心,是程序設(shè)計(jì)的思想,這篇文章主要介紹了Java面向?qū)ο箢惡蛯?duì)象的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • SpringBoot瘦身打包部署的實(shí)現(xiàn)

    SpringBoot瘦身打包部署的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot瘦身打包部署的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Java數(shù)據(jù)結(jié)構(gòu)之AC自動(dòng)機(jī)算法的實(shí)現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之AC自動(dòng)機(jī)算法的實(shí)現(xiàn)

    AC自動(dòng)機(jī)算法常被認(rèn)為是Trie樹+KMP算法的結(jié)合體,它是一個(gè)多模式匹配算法,在模式匹配領(lǐng)域被廣泛應(yīng)用。本文將詳細(xì)為大家介紹AC自動(dòng)機(jī)的原理與實(shí)現(xiàn)方法,感興趣的可以了解一下
    2022-12-12
  • 詳解SpringBoot是如何整合JPA的

    詳解SpringBoot是如何整合JPA的

    借助于開發(fā)框架,我們已經(jīng)不用編寫原始的訪問數(shù)據(jù)庫的代碼,也不用調(diào)用JDBC或者連接池等諸如此類的被稱作底層的代碼,我們將從更高的層次上訪問數(shù)據(jù)庫,本章我們將詳細(xì)介紹在Springboot中使用 Spring Data JPA 來實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作,需要的朋友可以參考下
    2021-06-06
  • Springboot死信隊(duì)列?DLX?配置和使用思路分析

    Springboot死信隊(duì)列?DLX?配置和使用思路分析

    死信隊(duì)列簡稱就是DLX,死信交換機(jī)和死信隊(duì)列和普通的沒有區(qū)別,當(dāng)消息成為死信后,如果該隊(duì)列綁定了死信交換機(jī),則消息會(huì)被死信交換機(jī)重新路由到死信隊(duì)列,本文給大家介紹Springboot死信隊(duì)列?DLX的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2022-03-03
  • Java并發(fā)之AQS與自旋鎖詳解

    Java并發(fā)之AQS與自旋鎖詳解

    這篇文章主要介紹了Java并發(fā)之AQS與自旋鎖詳解,類如其名,抽象的隊(duì)列式的同步器,AQS定義了一套多線程訪問共享資源的同步器框架,許多同步類實(shí)現(xiàn)都依賴于它,如常用的ReentrantLock/Semaphore/CountDownLatch,需要的朋友可以參考下
    2023-10-10
  • MapTask工作機(jī)制圖文詳解

    MapTask工作機(jī)制圖文詳解

    今天小編就為大家分享一篇關(guān)于MapTask工作機(jī)制圖文詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01

最新評(píng)論