您好,登錄后才能下訂單哦!
小編給大家分享一下Spring之BeanPostProcessor的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
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方法
以上是“Spring之BeanPostProcessor的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。