Spring源碼解析之BeanPostProcessor知識總結
一、簡介
BeanPostProcessor是Spring IOC容器給我們提供的一個擴展接口。
實例化Bean做前置處理、後置處理
二、接口定義
@Component public class BeanPost implements BeanPostProcessor { /** * 在每個bean創建之後的初始化方法之前調用 * @param bean 當前實例化的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的初始化方法執行之後被調用 * @param bean 當前實例化的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對象->設置對象屬性->檢查Aware接口設置依賴
->BeanPostProcessor前置處理->檢查是否是initializingBean以決定是否調用afterPropertiesSet方法->檢查是否配置自定義init-method->BeanPostProcessor後置處理->註冊必要的Destruction相關回調接口->。。。->是否實現DisposableBean接口->是否配置自定義destroy方法
三、源碼
1.由AnnotationConfigApplicationContext進入
2.進入構造方法的refresh方法
3.進入到finishBeanFactoryInitialization方法
4.進入preInstantiateSingletons方法
5.執行getBean實例化方法
6創建bean實例
7.doCreateBean
8.進入初始化接口
9.可以看到執行到瞭BeanPostProcessor 提供的2個方法
進入內部可以看到
10.然後繼續往下走開始AWare流程
內部:
11.進入invokeAwareInterfaces(bean);方法
內部:
當前bean實現瞭ApplicationContextAware接口
12.走到Person類中的setApplicationContext方法
一入源碼深似海,苦海無邊,回頭是岸
到此這篇關於Spring源碼解析之BeanPostProcessor知識總結的文章就介紹到這瞭,更多相關BeanPostProcessor的使用內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 淺析對Spring aware接口理解
- Spring BeanPostProcessor(後置處理器)的用法
- 深入瞭解Spring的Bean生命周期
- 詳解Spring中Bean後置處理器(BeanPostProcessor)的使用
- 關於Spring BeanPostProcessor的執行順序