Spring加载流程源码分析____ClassPathXmlApplicationContext源码跟踪(一)__super(parent)

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationcontext.xml");

从ClassPathXmlApplicationContext进入跟踪:
Spring加载流程源码分析____ClassPathXmlApplicationContext源码跟踪(一)__super(parent)
Spring加载流程源码分析____ClassPathXmlApplicationContext源码跟踪(一)__super(parent)

这里我们记住this里的参数:
configLocation:applicationContext.xml
parent:null
refresh:true

super(parent)// 1.初始化父类
setConfigLocations(configLocations);// 2.设置本地的配置信息
// 3.完成Spring容器的初始化
if (refresh) {
refresh();
}
Spring加载流程源码分析____ClassPathXmlApplicationContext源码跟踪(一)__super(parent)

这篇我们主讲super(parent)!
super(parent)其实就是调用的AbstractXmlApplicationContext的构造方法
Spring加载流程源码分析____ClassPathXmlApplicationContext源码跟踪(一)__super(parent)
Spring加载流程源码分析____ClassPathXmlApplicationContext源码跟踪(一)__super(parent)
Spring加载流程源码分析____ClassPathXmlApplicationContext源码跟踪(一)__super(parent)
Spring加载流程源码分析____ClassPathXmlApplicationContext源码跟踪(一)__super(parent)

查看this()方法:
Spring加载流程源码分析____ClassPathXmlApplicationContext源码跟踪(一)__super(parent)

在该构造方法对resourcePatternResolver 变量赋值。resourcePatternResolver 的作用是根据路径得到类的Resource对象;
查看getResourcePatternResolver方法:
Spring加载流程源码分析____ClassPathXmlApplicationContext源码跟踪(一)__super(parent)

创建PathMatchingResourcePatternResolver对象的时候,AbstractApplicationContext将自身作为ResourceLoader传递给了PathMatchingResourcePatternResolver;
Spring加载流程源码分析____ClassPathXmlApplicationContext源码跟踪(一)__super(parent)

返回到AbstractApplicationContext的构造方法中:
Spring加载流程源码分析____ClassPathXmlApplicationContext源码跟踪(一)__super(parent)

跟踪setParent(parent);我们上面有讲参数parent为null
Spring加载流程源码分析____ClassPathXmlApplicationContext源码跟踪(一)__super(parent)
Spring加载流程源码分析____ClassPathXmlApplicationContext源码跟踪(一)__super(parent)

因为parent为null所以if语句中的代码不会执行,所以此if中的代码在此逻辑中不会执行,所以在此就没有分析的必要了。
初始化的第一部分就分析完毕了,这部分的主要工作是为后续Resource处理准备好处理类。

以上内容都是我借鉴大佬博客而来的,跟着大佬的博客然后我自己去反复跟踪代码去理解,以及学会能说得出来,
波波老师的博客干货满满,值得关注!
https://dpb-bobokaoya-sm.blog.csdn.net/article/details/87870315

Spring加载流程源码分析____ClassPathXmlApplicationContext源码跟踪(一)__super(parent)

上一篇:小米 9 SE 获取Root 和 安装Magisk


下一篇:AutoMapper用法