Spring扩展功能BeanDefinitionRegistry

2020-06-04  本文已影响0人  会上树的程序猿

前面我们对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<BeanFactoryPostProcessor> beanFactoryPostProcessors) 方法,所有的操作在此方法中完成:

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

上一篇 下一篇

猜你喜欢

热点阅读