Spring源碼解析之bean工廠后置處理器(BeanFactoryPostProcessor)和BeanDefinitionRegistryPostProcessor


1、BeanFactoryPostProcessor是一個接口,它允許自定義修改應用程序上下文的bean定義,在基於bean factory上調整上下文的bean屬性值。BeanFactoryPostProcessor可以與bean交互並修改bean定義,但從不使用bean實例。

該接口有一個方法:void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;

該方法可以在應用程序上下文初始化之后修改bean factory。所有的bean定義都已經被加載了,但是還沒有實例化bean,這樣就可以覆蓋或添加屬性。

  實例:注入實現接口BeanFactoryPostProcessor的bean

 源碼debug圖解

(1)、

(2)、

(3)、

(4)、

(5)、

(6)、

 

2、BeanDefinitionRegistryPostProcessor接口繼承接口BeanFactoryPostProcessor,該接口新增postProcessBeanDefinitionRegistry方法,方法參數是BeanDefinitionRegistry對象,BeanDefinitionRegistry對象是bean定義的保存中心

  public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException 

實例:注入實現接口BeanFactoryPostProcessor的bean

@Component
public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        System.out.println("MyBeanDefinitionRegistryPostProcessor  :  postProcessBeanDefinitionRegistry");
        System.out.println(registry.getBeanDefinitionCount());
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(AddedBean.class);
        registry.registerBeanDefinition("myaddBeanDefinition",rootBeanDefinition);
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        System.out.println("MyBeanDefinitionRegistryPostProcessor  :  postProcessBeanFactory");
        System.out.println(beanFactory.getBeanDefinitionCount());
    }
}

  

 源碼debug圖解

  1-4步和BeanFactoryPostProcessor接口的圖解一致

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM