BeanFactoryPostProcessor
Spring IoC容器允許BeanFactoryPostProcessor在容器實(shí)例化任何bean之前讀取bean的定義(配置元數(shù)據(jù)),并可以修改它。同時(shí)可以定義多個(gè)BeanFactoryPostProcessor,通過(guò)設(shè)置'order'屬性來(lái)確定各個(gè)BeanFactoryPostProcessor執(zhí)行順序。
注冊(cè)一個(gè)BeanFactoryPostProcessor實(shí)例需要定義一個(gè)Java類來(lái)實(shí)現(xiàn)BeanFactoryPostProcessor接口,并重寫(xiě)該接口的postProcessorBeanFactory方法。通過(guò)beanFactory可以獲取bean的定義信息,并可以修改bean的定義信息。
public interface BeanFactoryPostProcessor {
/**
* 參數(shù)是beanFactory,這時(shí)候可以從beanFactory取出自己感興趣的BeanDefinition,做修改。這時(shí)候Bean還沒(méi)實(shí)例化的。
*/
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}
BeanPostProcessor
如果我們想在Spring容器中完成bean實(shí)例化、配置以及其他初始化方法前后要添加一些自己邏輯處理。我們需要定義一個(gè)或多個(gè)BeanPostProcessor接口實(shí)現(xiàn)類,然后注冊(cè)到Spring IoC容器中。
public interface BeanPostProcessor {
/**
* 在bean初始化之前執(zhí)行(比如InitializingBean的afterPropertiesSet方法或者自定義的初始化方法)。返回最終使用的Bean對(duì)象(可以做自定義處理,比如包裝原先的Bean實(shí)例)
*/
Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
/**
* 在bean初始化之后執(zhí)行(比如InitializingBean的afterPropertiesSet方法或者自定義的初始化方法)。返回最終使用的Bean對(duì)象(可以做自定義處理,比如包裝原先的Bean實(shí)例)
*/
Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
}