SpringIOC 初始化原始碼解析

2021-09-20 04:47:58 字數 2339 閱讀 7113

springioc容器的關鍵兩個主要的容器系列:

寫了段簡單的**,ioc容器的具體的過程都在這一句話上(後台很硬的~_~):

下面咱們就來看看ioc的後台是多麼的硬,加了斷點除錯了下,跳進去的第一步是:

public

throws bean***ception

}

上面**的refresh()是ioc容器啟動的入口,後邊會牽扯一系列的複雜操作,看一下refresh的**:

@override

public

void

refresh() throws bean***ception, illegalstateexception

catch (bean***ception ex)

// 為防止bean資源占用,在異常處理中,銷毀已經在前面過程中生成的單件bean

destroybeans();

// 重置『active』標誌

cancelrefresh(ex);

// propagate exception to caller.

throw ex;

}finally }}

具體的來說:ioc容器的正式啟動包括:beandefinition的resouce定位,載入和註冊三個基本過程。下面咱們就一步步的來看

protected

final

void

refreshbeanfactory() throws bean***ception

try

} catch (ioexception ex)

}

refreshbeanfactory()方法的功能就是判斷是否已經建立了beanfactory,如果存在,則銷毀並關閉該beanfactory,然後再建立乙個新的ioc容器來使用,這樣來保證我們用的beanfactory是最新的。保證我們要用到的水桶是最新的。

//xml bean讀取器載入bean定義資源  

19protected

void

loadbeandefinitions(xmlbeandefinitionreader reader) throws bean***ception, ioexception

2728 string configlocations = getconfiglocations();

29if (configlocations != null)

34 }

//過載方法,呼叫下面的loadbeandefinitions(string, set);方法  

public

intloadbeandefinitions(string location) throws beandefinitionstoreexception

public

intloadbeandefinitions(string location, setactualresources) throws beandefinitionstoreexception

if (resourceloader instanceof resourcepatternresolver)

} if (logger.isdebugenabled())

return loadcount;

} catch (ioexception ex)

} else

if (logger.isdebugenabled())

return loadcount;

} }

下面就是具體的對資源的定位

//獲取resource的具體實現方法  

public resource getresource(string location)

try

catch (malformedurlexception ex)

//如果既不是classpath標識,又不是url標識的resource定位,則呼叫

//容器本身的getresourcebypath方法獲取resource

return getresourcebypath(location);

}

Tomcat原始碼之 初始化

1.首先設定catalina 的路徑和初始化classloader 2.利用反射模式啟動catalila catalila.load 的時候 初始化相應的容器 img catalila.start 啟動的時候,把相應的容器同事啟動 按從大到小依次啟動 先啟動server,在service,然後eng...

springmvc原始碼解析 初始化

1.概述 handleradapter的繼承體系 同樣的視 析器viewresolver針對不同的輸出格式也有一系列的實現類,具體可自己看。2.實現分析 以我自己的乙個web專案中spring mvc的配置為例 2.1 spring mvc初始化流程 dispatcherservlet的繼承體系如 ...

Spring原始碼研究 容器初始化

新建乙個容器,看看後面幹了啥 xmlbeandefinitionreader.loadbeandefinitions resource line 302 我們用string指定了xml配置檔案的路徑,spring要將其封裝到resource方便io,這裡的resource指的就是我們的配置 之後經過...