ApplicationContext ac = new ClassPathXmlApplicationContext("applicationcontext.xml");
从ClassPathXmlApplicationContext进入跟踪:
这里我们记住this里的参数:
configLocation:applicationContext.xml
parent:null
refresh:true
super(parent)// 1.初始化父类
setConfigLocations(configLocations);// 2.设置本地的配置信息
// 3.完成Spring容器的初始化
if (refresh) {
refresh();
}
这篇我们主讲super(parent)!
super(parent)其实就是调用的AbstractXmlApplicationContext的构造方法
查看this()方法:
在该构造方法对resourcePatternResolver 变量赋值。resourcePatternResolver 的作用是根据路径得到类的Resource对象;
查看getResourcePatternResolver方法:
创建PathMatchingResourcePatternResolver对象的时候,AbstractApplicationContext将自身作为ResourceLoader传递给了PathMatchingResourcePatternResolver;
返回到AbstractApplicationContext的构造方法中:
跟踪setParent(parent);我们上面有讲参数parent为null
因为parent为null所以if语句中的代码不会执行,所以此if中的代码在此逻辑中不会执行,所以在此就没有分析的必要了。
初始化的第一部分就分析完毕了,这部分的主要工作是为后续Resource处理准备好处理类。
以上内容都是我借鉴大佬博客而来的,跟着大佬的博客然后我自己去反复跟踪代码去理解,以及学会能说得出来,
波波老师的博客干货满满,值得关注!
https://dpb-bobokaoya-sm.blog.csdn.net/article/details/87870315
Spring加载流程源码分析____ClassPathXmlApplicationContext源码跟踪(一)__super(parent)