BeanFactoryPostProcessor和BeanPostProcessor的區別

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要早。

相關文章
相關標籤/搜索