转载请注明出处 :
cnblog地址:https://www.cnblogs.com/christmad/p/9173958.html
CSND地址:https://blog.csdn.net/qq_33741986/article/details/80667231
最近在阅读spring源码,有关IOC容器创建的部分。本文讲的是我在看到容器创建核心方法 的AbstractApplicationContext#refresh() 中的第五步:invokeBeanFactoryPostProcessors(beanFactory); 时发现的一些“有趣的”代码,贴图如下,注释已经在图中:
CNBLOG图片被截了右边一部分(有会的可以在评论区教下怎么放完整的,可以点“右键→在新标签中打开图片”来查看完整图片。
相信大家已经学到了...
那么 5.0.X 对比 4.3.11 版本,新版本在此方法上的改动为:使用一个
List<BeanDefinitionRegistryPostProcessor> currentRegistryProcessors = new ArrayList<>();
代替了
List<BeanDefinitionRegistryPostProcessor> priorityOrderedPostProcessors = new ArrayList<BeanDefinitionRegistryPostProcessor>();
和
List<BeanDefinitionRegistryPostProcessor> orderedPostProcessors = new ArrayList<BeanDefinitionRegistryPostProcessor>();
invokeBeanFactoryPostProcessors(beanFactory); 是对BeanFactory 进行增强,也就是支持修改 BeanDefinition。开发人员只需实现 BeanFactoryPostProcessors#postProcessBeanDefinitionRegistry() 接口 和 它的父类接口 BeanFactoryPostProcessor#postProcessBeanFactory() 。
最后贴上一个学习 AbstractApplicationContext#refresh() 较好的资料:(这位博主有一些系列文章,可以追踪学习)
https://my.oschina.net/wangzhenchao/blog/918627
一份好的笔记对于刚开始学习源码的开发者来说裨益极大,等当我们有了一定的源码阅读能力和编程技巧的积累之后,我们也会在看新源码时做自己的笔记然后读第二遍第三遍,最终得到一篇比较成型的学习笔记。共勉。