spring源码梳理(一 )
我们了解spring源码在平时的开发中能够更快速的去定位问题,并且能够去学习这些框架中的设计模式
环境搭建
1.在idea中创建一个maven工程
相信大家都很熟悉,所以本文中略过。
2.创建一个java类
3.创建SpringBean配置文件
4.pom文件
5.创建一个main函数入口
说明:项目目录如下:其中MyApp类是和App类类似可以不用管。
![](https://static001.geekbang.org/infoq/65/65bec8daa3278206ef8b6acd1f97b0dc.png)
进入spring源码--debug调试
首先我们要从main入口开始,进入ClassPathXmlApplicationContext类,如图:
![](https://static001.geekbang.org/infoq/e1/e1a1b6039efebef6dc41f99e697e0d09.png)
然后进入到如下如代码部分:
![](https://static001.geekbang.org/infoq/b2/b2e9e5a48c418a0d540415728a5c2198.png)
调用自己的构造函数,传入configLocation配置文件信息,此处configLocation=SpringBean.xml,一个refresh参数为true,还一个空的上下文对象,然后进入:
![](https://static001.geekbang.org/infoq/bf/bfe74ace7352778eb2922e2f9450731a.png)
这是refresh参数用到了,进入if逻辑,调用一个refresh方法,在此之前setConfigLocations主要是加载Spring配置文件的位置。下面是refresh方法代码如下:
![](https://static001.geekbang.org/infoq/2c/2c2f36549615df849fd42dd254a2b87c.png)
其中,核心方法this.obtainFreshBeanFactory(),进入到这个方法代码如下:
![](https://static001.geekbang.org/infoq/24/24237e6fe9bad3adc45055838f518e72.png)
主要有两个方法this.refreshBeanFactory()和this.getBeanFactory(),其中refreshBeanFactory()代码如下:
![](https://static001.geekbang.org/infoq/e4/e4b76049e8f7e5f5e6640ab9f869093a.png)
总的来说ClassPathXmlApplicationContext 这种形式的Spring配置文件的加载主要是下面的过程:
A:加载配置文件名到系统配置
B:销毁已有的Beans和BeanFactory
C:创建新的BeanFactory
D:加载Beans,分析Bean中的节点,然后加载到BeanFactory,BeanFactory生效。
版权声明: 本文为 InfoQ 作者【彭阿三】的原创文章。
原文链接:【https://xie.infoq.cn/article/440bdb97a6c4d522fd10aa52b】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
个人公众号 :