BeanFactoryPostProcessor和BeanPostProcessor都是Spring初始化bean的擴展點。兩個接口很是類似。post
BeanFactoryPostProcessor能夠對bean的定義(配置元數據)進行處理。也就是說,Spring IoC容器容許BeanFactoryPostProcessor在容器實際實例化任何其它的bean以前讀取配置元數據,並有可能修改它。若是你願意,你能夠配置多個BeanFactoryPostProcessor。你還能經過設置'order'屬性來控制BeanFactoryPostProcessor的執行次序。code
註冊BeanFactoryPostProcessor的實例,須要重載void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;接口
經過beanFactory能夠獲取bean的示例或定義等。同時能夠修改bean的屬性,這是和BeanPostProcessor最大的區別。get
例如:it
BeanDefinition bd = beanFactory.getBeanDefinition("xxBean"); io
MutablePropertyValues mpv = bd.getPropertyValues(); table
if(pv.contains("xxName")) { 容器
pv.addPropertyValue("xxName", "icoder"); 擴展
}配置
註冊BeanPostProcessor的實例,須要重載
Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
和
Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
還有一點區別就是BeanFactoryPostProcessor的回調比BeanPostProcessor要早。