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!

推薦閱讀: