BeanFactoryPostProcessor和BeanPostProcessor

Spring提供了兩種PostProcessor(後置處理)bean的擴展接口,分別爲BeanPostProcessor和BeanFactoryPostProcessor 

1.BeanFactoryPostProcessor:是針對於beanFactory的擴展點,即spring會在beanFactory初始化之後,beanDefinition都已經loaded,但是bean還未創建前進行調用,可以修改,增加beanDefinition

public interface BeanFactoryPostProcessor {
    void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}

此接口只提供了一個方法,方法參數爲ConfigurableListableBeanFactory 

 

2.BeanPostProcessor:是針對bean的擴展點,即spring會在bean初始化前後 調用方法對bean進行處理

public interface BeanPostProcessor {
  Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException
  Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException
}

接口提供了兩個方法,分別是初始化前和初始化後執行方法,如果定義一個類實現了BeanPostProcessor,默認是會對整個Spring容器中所有的bean進行處理。
可以根據第二個參數beanName 來確認我們將要處理的具體的bean。
這個的處理是發生在Spring容器的實例化和依賴注入之後。

在bean實例化之前,首先執行BeanFactoryPostProcessor實現類的方法,然後通過調用bean的無參構造函數實例化bean,並調用set方法注入屬性值。bean實例化後,執行初始化操作,調用兩個初始化方法(兩個初始化方法的順序:先執行afterPropertiesSet,再執行init-method)前後,執行了BeanPostProcessor實現類的兩個方法

3.BeanDefinitionRegistryPostProcessor是BeanFactoryPostProcessor的子接口:是針對於beanFactory的擴展點,即spring會在調用BeanFactoryPostProcessor之前調用他。

4.InstantiationAwareBeanPostProcessor是BeanPostProcessor的子接口:是針對於bean的擴展點,即spring會在bean實例化前後進行調用

5.SmartInstantiationAwareBeanPostProcessor是InstantiationAwareBeanPostProcessor的子接口:是針對於bean的擴展點,預測已處理bean的最終類型,或者覺得bean實例化需要的構造函數,或者獲取早期的bean

6.MergedBeanDefinitionPostProcessor是BeanPostProcessor的子接口:是針對於bean的擴展點,即spring會處理某個給定的beanDefinition於原本的bean進行merged

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章