spring 源码阅读之“我总有你意想不到的增长代码的技巧” 版本 5.0.X 及 4.3.11+

转载请注明出处 :

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

一份好的笔记对于刚开始学习源码的开发者来说裨益极大,等当我们有了一定的源码阅读能力和编程技巧的积累之后,我们也会在看新源码时做自己的笔记然后读第二遍第三遍,最终得到一篇比较成型的学习笔记。共勉。

猜你喜欢

转载自www.cnblogs.com/christmad/p/9173958.html