Spring源碼解析之BeanPostProcessor知識總結(jié)
一、簡介
BeanPostProcessor是Spring IOC容器給我們提供的一個擴展接口。
實例化Bean做前置處理、后置處理
二、接口定義
@Component
public class BeanPost implements BeanPostProcessor {
/**
* 在每個bean創(chuàng)建之后的初始化方法之前調(diào)用
* @param bean 當(dāng)前實例化的bean
* @param beanName bean的名稱
* @return 返回實例化的bean或者可以對對象進行再封裝返回
* @throws BeansException
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("初始化前"+beanName);
return bean;
}
/**
* 在每個bean的初始化方法執(zhí)行之后被調(diào)用
* @param bean 當(dāng)前實例化的bean
* @param beanName bean的名稱
* @return 返回實例化的bean或者可以對對象進行再封裝返回
* @throws BeansException
*/
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("初始化后"+beanName);
return bean;
}
}
運行順序
實例化bean對象->設(shè)置對象屬性->檢查Aware接口設(shè)置依賴
->BeanPostProcessor前置處理->檢查是否是initializingBean以決定是否調(diào)用afterPropertiesSet方法->檢查是否配置自定義init-method->BeanPostProcessor后置處理->注冊必要的Destruction相關(guān)回調(diào)接口->。。。->是否實現(xiàn)DisposableBean接口->是否配置自定義destroy方法
三、源碼
1.由AnnotationConfigApplicationContext進入

2.進入構(gòu)造方法的refresh方法

3.進入到finishBeanFactoryInitialization方法

4.進入preInstantiateSingletons方法

5.執(zhí)行g(shù)etBean實例化方法

6創(chuàng)建bean實例

7.doCreateBean

8.進入初始化接口

9.可以看到執(zhí)行到了BeanPostProcessor 提供的2個方法

進入內(nèi)部可以看到

10.然后繼續(xù)往下走開始AWare流程

內(nèi)部:

11.進入invokeAwareInterfaces(bean);方法

內(nèi)部:
當(dāng)前bean實現(xiàn)了ApplicationContextAware接口

12.走到Person類中的setApplicationContext方法

一入源碼深似海,苦海無邊,回頭是岸
到此這篇關(guān)于Spring源碼解析之BeanPostProcessor知識總結(jié)的文章就介紹到這了,更多相關(guān)BeanPostProcessor的使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Spring BeanPostProcessor接口使用詳解
- Spring中的后置處理器BeanPostProcessor詳解
- SpringBoot之通過BeanPostProcessor動態(tài)注入ID生成器案例詳解
- Spring BeanPostProcessor(后置處理器)的用法
- Spring?BeanPostProcessor后處理器源碼解析
- 詳解使用Spring的BeanPostProcessor優(yōu)雅的實現(xiàn)工廠模式
- Spring探秘之如何妙用BeanPostProcessor
- Spring BeanPostProcessor源碼示例解析
- Spring注解驅(qū)動之BeanPostProcessor后置處理器講解
- Spring組件初始化擴展點:BeanPostProcessor
相關(guān)文章
Java使用RedisTemplate如何根據(jù)前綴獲取key列表
這篇文章主要介紹了Java使用RedisTemplate如何根據(jù)前綴獲取key列表,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
Java實現(xiàn)給網(wǎng)站上傳圖片蓋章的方法
這篇文章主要介紹了Java實現(xiàn)給網(wǎng)站上傳圖片蓋章的方法,涉及java針對圖片的合成操作技巧,類似水印功能,需要的朋友可以參考下2015-07-07
SpringBoot實現(xiàn)統(tǒng)一功能處理的教程詳解
這篇文章主要為大家詳細介紹了SpringBoot如何實現(xiàn)統(tǒng)一功能處理,文中的示例代碼講解詳細,對大家學(xué)習(xí)或工作有一定借鑒價值,感興趣的同學(xué)可以參考閱讀下2023-05-05
如何解決Project SDK is not defined問題
這篇文章主要介紹了如何解決Project SDK is not defined問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09

