Spring源碼解析之BeanPostProcessor知識總結(jié)
一、簡介
BeanPostProcessor是Spring IOC容器給我們提供的一個(gè)擴(kuò)展接口。
實(shí)例化Bean做前置處理、后置處理
二、接口定義
@Component public class BeanPost implements BeanPostProcessor { /** * 在每個(gè)bean創(chuàng)建之后的初始化方法之前調(diào)用 * @param bean 當(dāng)前實(shí)例化的bean * @param beanName bean的名稱 * @return 返回實(shí)例化的bean或者可以對對象進(jìn)行再封裝返回 * @throws BeansException */ @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("初始化前"+beanName); return bean; } /** * 在每個(gè)bean的初始化方法執(zhí)行之后被調(diào)用 * @param bean 當(dāng)前實(shí)例化的bean * @param beanName bean的名稱 * @return 返回實(shí)例化的bean或者可以對對象進(jìn)行再封裝返回 * @throws BeansException */ @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("初始化后"+beanName); return bean; } }
運(yùn)行順序
實(shí)例化bean對象->設(shè)置對象屬性->檢查Aware接口設(shè)置依賴
->BeanPostProcessor前置處理->檢查是否是initializingBean以決定是否調(diào)用afterPropertiesSet方法->檢查是否配置自定義init-method->BeanPostProcessor后置處理->注冊必要的Destruction相關(guān)回調(diào)接口->。。。->是否實(shí)現(xiàn)DisposableBean接口->是否配置自定義destroy方法
三、源碼
1.由AnnotationConfigApplicationContext進(jìn)入
2.進(jìn)入構(gòu)造方法的refresh方法
3.進(jìn)入到finishBeanFactoryInitialization方法
4.進(jìn)入preInstantiateSingletons方法
5.執(zhí)行g(shù)etBean實(shí)例化方法
6創(chuàng)建bean實(shí)例
7.doCreateBean
8.進(jìn)入初始化接口
9.可以看到執(zhí)行到了BeanPostProcessor 提供的2個(gè)方法
進(jìn)入內(nèi)部可以看到
10.然后繼續(xù)往下走開始AWare流程
內(nèi)部:
11.進(jìn)入invokeAwareInterfaces(bean);方法
內(nèi)部:
當(dāng)前bean實(shí)現(xiàn)了ApplicationContextAware接口
12.走到Person類中的setApplicationContext方法
一入源碼深似海,苦海無邊,回頭是岸
到此這篇關(guān)于Spring源碼解析之BeanPostProcessor知識總結(jié)的文章就介紹到這了,更多相關(guān)BeanPostProcessor的使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中的動(dòng)態(tài)代理和靜態(tài)代理詳細(xì)解析
這篇文章主要介紹了Java中的動(dòng)態(tài)代理和靜態(tài)代理詳細(xì)解析,Java中的代理可以幫助被代理者完成一些前期的準(zhǔn)備工作和后期的善后工作,但是核心的業(yè)務(wù)邏輯仍然是由被代理者完成,需要的朋友可以參考下2023-11-11詳解Java中CountDownLatch異步轉(zhuǎn)同步工具類
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著CountDownLatch異步轉(zhuǎn)同步工具類展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06Java基礎(chǔ)之邏輯運(yùn)算符知識總結(jié)
今天帶大家學(xué)習(xí)Java基礎(chǔ)知識,文中對Java邏輯運(yùn)算符進(jìn)行了非常詳細(xì)的介紹,有相關(guān)代碼示例,對正在學(xué)習(xí)java的小伙伴很有幫助,需要的朋友可以參考下2021-05-05基于Java快速實(shí)現(xiàn)一個(gè)簡單版的HashMap詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Java簡單實(shí)現(xiàn)一個(gè)底層數(shù)據(jù)結(jié)構(gòu)為數(shù)組?+?鏈表的HashMap,不考慮鏈表長度超過8個(gè)時(shí)變?yōu)榧t黑樹的情況,需要的可以參考一下2023-02-02Spring-全面詳解(學(xué)習(xí)總結(jié))
這篇文章主要介紹了詳解Spring框架入門,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望能給你帶來幫助2021-07-07idea新建聚合項(xiàng)目并附上標(biāo)簽的詳細(xì)過程
這篇文章主要介紹了idea新建聚合項(xiàng)目并附上標(biāo)簽的詳細(xì)過程,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08