天天看點

Spring源碼分析--IOC容器篇

我們以xml配置檔案示例

spring的啟動類

IOC中設計到的幾個很重要的類,如下

接口、類

含義

BeanFactory

建立bean的頂級接口

BeanDefinition

xml中的bean資訊最終會被解析成為一個個BeanDefinition

BeanDefinitionMap

<k,v>鍵值對,key是bean的名稱,v 是對應的BeanDefinition

Spring源碼分析--IOC容器篇

先看第一句代碼

進入該方法

setConfigLocations(configLocations);

把配置檔案加載進容器中,那麼是怎麼加載進容器的呢?在這之前我們先了解下資源加載器 ResourceLoader和資源模式解析器 ResourcePatternResolver,用于從類路徑下或者檔案系統中加載并識别資源。常見的資源模式如下

classpath:

classpath*:

/WEB-INF/*-context.xml

/beans.xml

既然能夠加載檔案系統中的資源,比如C:\Users\luo20\Desktop\dubbo.xml,那麼我們作業系統的環境資訊應該在加載配置檔案之前就設定進上下文中,這個也有對應的實作

現在系統的資訊也有了,配置檔案資源也有了,接下來開始最最最重要的方法

refresh()

這個方法是IOC的核心

下面我将一個一個方法進行深入解析

方法一:prepareRefresh();
方法二:ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

重點在怎麼把xml變為BeanDefinition,進入loadBeanDefinitions(beanFactory);

經過一系列的loadBeanDefinitions,最終到了這個方法

進入doLoadBeanDefinitions(inputSource, encodedResource.getResource());

進入registerBeanDefinitions(doc, resource);

進入registerBeanDefinitions(doc, createReaderContext(resource))

進入

進入parseBeanDefinitions(root, this.delegate);

我們的bean是有預設的命名空間的,是以進入

進入processBeanDefinition(ele, delegate);

當把我們配置檔案中的bean标簽解析為BeanDefinition,并添加到BeanDefinitionMap中,obtainFreshBeanFactory()方法完成

篇幅太長,每天更新一個方法,哈哈