Spring扩展功能BeanDefinitionRegistryPostProcessor源码解读

前面我们对BeanDefinitionRegistryPostProcessor做了简单的学习,在创建bean之前我们可以按照自己的意愿可以向容器中注册我们自己的bean信息,本节我们来深入学习它的相关源码知识,分析的入口还是我们的IOC容器的创建过程,在上节BeanFactoryPostProcessor中我们已经提到了,这里直接从AbstractApplicatContext的#refresh()方法来看

在#refresh()方法里如下代码片段需要我们注意一下:

  this.invokeBeanFactoryPostProcessors(beanFactory);

跟踪代码来到AbstractApplicationContext#invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory)方法中

 protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory) {
    PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, this.getBeanFactoryPostProcessors());
    if (beanFactory.getTempClassLoader() == null && beanFactory.containsBean("loadTimeWeaver")) {
        beanFactory.addBeanPostProcessor(new LoadTimeWeaverAwareProcessor(beanFactory));
        beanFactory.setTempClassLoader(new ContextTypeMatchClassLoader(beanFactory.getBeanClassLoader()));
    }

}

上述代码片段中PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, this.getBeanFactoryPostProcessors())需要我们值得注意,Dbug进去来到:PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory, List beanFactoryPostProcessors) 方法,所有的操作在此方法中完成:

    1. 首先从容器中获取到类型为【BeanDefinitionRegistryPostProcessor】的组件
    1. 依次调用#postProcessBeanDefinitionRegistry(...)方法
    1. 接着是调用#postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)方法
  • 4 .最后找到类型为BeanFactoryPostProcessor的组件来触发#postProcessBeanFactory()

上述就是关于BeanDefinitionRegistryPostProcessor相关源码的解读,具体细节自己感兴趣的可以去看看

你可能感兴趣的:(Spring扩展功能BeanDefinitionRegistryPostProcessor源码解读)