亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring擴展點之BeanFactoryPostProcessor詳解

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

BeanFactoryPostProcessor

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

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

說明:BeanDefinition對象,即:Bean定義對象,里面存儲著Bean標簽的所有信息,Spring就是通過BeanDefintion對象來生成最終的Bean實例。

執(zhí)行時機

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

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

使用

/**
 * TODO 自定義BeanFactoryPostProcessor
 *      執(zhí)行時間:所有的Bean定義信息已經(jīng)加載到容器中,但是Bean實例還沒有被初始化.
 *
 * @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 容器調用了MyBeanFactoryPostProcessor中重寫的postProcessBeanFactory方法");
        for(String name:beanFactory.getBeanDefinitionNames()) {
            if("person".equals(name)) {
                System.out.println("將Person對象設置為懶加載");
                BeanDefinition beanDefinition = beanFactory.getBeanDefinition(name);
                beanDefinition.setLazyInit(true);
            }
        }
    }
}

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

方式一

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

/**
 * 定義一個主配置類,標識為@Configuration,通過@Bean方式初始化,注入IOC容器
 */
@Configuration
public class MainConfig {

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

方式二

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

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

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

執(zhí)行結果

在這里插入圖片描述

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

相關文章

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

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

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

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

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

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

    這篇文章主要介紹了Groovy的規(guī)則腳本引擎實例解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java面向對象類和對象實例詳解

    Java面向對象類和對象實例詳解

    面向對象乃是Java語言的核心,是程序設計的思想,這篇文章主要介紹了Java面向對象類和對象的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • SpringBoot瘦身打包部署的實現(xiàn)

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

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

    Java數(shù)據(jù)結構之AC自動機算法的實現(xiàn)

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

    詳解SpringBoot是如何整合JPA的

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

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

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

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

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

    MapTask工作機制圖文詳解

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

最新評論