BeanFactoryPostProcessor
Spring IoC容器允許BeanFactoryPostProcessor在容器實例化任何bean之前讀取bean的定義(配置元數據)珠月,并可以修改它。同時可以定義多個BeanFactoryPostProcessor炬搭,通過設置'order'屬性來確定各個BeanFactoryPostProcessor執(zhí)行順序忍坷。
注冊一個BeanFactoryPostProcessor實例需要定義一個Java類來實現BeanFactoryPostProcessor接口,并重寫該接口的postProcessorBeanFactory方法深胳。通過beanFactory可以獲取bean的定義信息绰疤,并可以修改bean的定義信息。
public interface BeanFactoryPostProcessor {
/**
* 參數是beanFactory舞终,這時候可以從beanFactory取出自己感興趣的BeanDefinition轻庆,做修改。這時候Bean還沒實例化的敛劝。
*/
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}
BeanPostProcessor
如果我們想在Spring容器中完成bean實例化余爆、配置以及其他初始化方法前后要添加一些自己邏輯處理。我們需要定義一個或多個BeanPostProcessor接口實現類夸盟,然后注冊到Spring IoC容器中蛾方。
public interface BeanPostProcessor {
/**
* 在bean初始化之前執(zhí)行(比如InitializingBean的afterPropertiesSet方法或者自定義的初始化方法)。返回最終使用的Bean對象(可以做自定義處理上陕,比如包裝原先的Bean實例)
*/
Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
/**
* 在bean初始化之后執(zhí)行(比如InitializingBean的afterPropertiesSet方法或者自定義的初始化方法)转捕。返回最終使用的Bean對象(可以做自定義處理,比如包裝原先的Bean實例)
*/
Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
}