我們了解spring源碼在平時的開發(fā)中能夠更快速的去定位問題,并且能夠去學習這些框架中的設計模式
環(huán)境搭建
1.在idea中創(chuàng)建一個maven工程
? ? ? 相信大家都很熟悉,所以本文中略過。
2.創(chuàng)建一個java類

3.創(chuàng)建SpringBean配置文件

4.pom文件

說明:項目目錄如下:其中MyApp類是和App類類似可以不用管。

進入spring源碼--debug調試
首先我們要從main入口開始,進入ClassPathXmlApplicationContext類,如圖:

然后進入到如下如代碼部分:

調用自己的構造函數(shù),傳入configLocation配置文件信息,此處configLocation=SpringBean.xml,一個refresh參數(shù)為true,還一個空的上下文對象,然后進入:

這是refresh參數(shù)用到了,進入if邏輯,調用一個refresh方法,在此之前setConfigLocations主要是加載Spring配置文件的位置。下面是refresh方法代碼如下:

其中,核心方法this.obtainFreshBeanFactory(),進入到這個方法代碼如下:

主要有兩個方法this.refreshBeanFactory()和this.getBeanFactory(),其中refreshBeanFactory()代碼如下:

總的來說ClassPathXmlApplicationContext 這種形式的Spring配置文件的加載主要是下面的過程:
A:加載配置文件名到系統(tǒng)配置
B:銷毀已有的Beans和BeanFactory
C:創(chuàng)建新的BeanFactory
D:加載Beans,分析Bean中的節(jié)點,然后加載到BeanFactory,BeanFactory生效。