web環境下的ioc容器的建立(1)

2021-10-12 03:12:58 字數 3067 閱讀 6419

在前面的spring ioc原始碼分析中,我們從配置檔案以及註解兩方面簡單分析了beandefinition的建立以及bean的例項化過程。而目前企業開發中大都是基於web環境的。那麼在web環境下,spring的ioc是在什麼時候建立的?它又在什麼地方起作用了?

這裡環境搭建過程就省略了 將專案部署在tomcat下,然後啟動tomcat

首先我們需要知道,springmvc也是基於servlet來進行web開發的。我們在web.xml中配置的dispatcherservlet就是我們請求的入口。

而對於乙個servlet來說,必然會涉及他的生命週期。

init() service() destory()

很顯然,springmvc肯定是在init的時候,去來初始化的ioc容器。所以我們就從init入手去看他的乙個簡單的流程

先來看一下dispatcherservlet的繼承關係

直接父類就是feameworkservlet了

dospatcherservlet的初始化

}//初始化ioc容器

this

.initservletbean()

;}初始化ioc容器 這裡只是很簡單的分析下 因為重點是springmvc,並且ioc在前面spring著重分析過了 這裡大概走一遍就ok 具體的細節也不會去打斷點去除錯的

frameworkservlet  186 line

protected

final

void

initservletbean()

throws servletexception ..

....

}

public

inte***ce

extends

frameworkservlet  212 line()

//初始化ioc容器

this

.(cwac);}

}}if(wac == null)

if(wac == null)..

....

return wac;

}

frameworkservlet  266 line

else

}

初始化ioc容器

frameworkservlet  284 line

protected

void

else

}//ioc持有servletcontext 那麼這個web資源都可以從這裡獲取

wac.

setservletcontext

(this

.getservletcontext()

);wac.

setservletconfig

(this

.getservletconfig()

);//dispatcherservlet-servlet 這個就是預設springmvc.xml的名字

wac.

setnamespace

(this

.getnamespace()

);//新增了乙個***

wac.

(new

sourcefilteringlistener

(wac,

newframeworkservlet.contextrefreshlistener()

)); configurableenvironment env = wac.

getenvironment()

;if(env instanceof

configurablewebenvironment

)this

.(wac)

;this

.(wac)

;//初始化ioc容器 可以不用往下看了 這一塊就是springioc的refresh方法了

wac.

refresh()

;}

簡單說一下配置檔案是怎麼獲取的

我們可以看到上面設定了wac.setnamespace(this.getnamespace());如果我們自己有在web.xml裡面設定springmvc.xml檔案的位置,就用我們自己設定的 如果沒有,那麼就會使用預設的

獲取載入bd的xml檔案的路徑

this

.getconfiglocations()

;

使用預設的路徑 觀察下面**可以看到

預設的為 /web-inf/dispatcherservlet-servlet.xml

protected string[

]getdefaultconfiglocations()

:new

string

;}

那麼什麼時候設定的namespace呢,通過檢視原始碼,我們發現 其實他會取預設的servletname再拼接-servlet

frameworkservlet   129 line

public string getnamespace()

到了這裡,我們的基於springmvc的一部分bean已經載入完了,並且我們也得知了springmvc.xml需要放置的位置,以及他的命名的一些要求

附帶一下專案結構吧

IOC容器的實現

面試的時候,偶爾會遇到讓談談ioc容器的問題,在這裡做乙個簡要的整理。這個問題從畢業到現在時不時的出現,答案也一次一次的被重新整理。因為個人理解有限,僅從三個階段去闡述,同時歡迎各位拍磚。size medium b 階段一 概念的闡述 b b 階段二 從實現的角度去闡述 b b 階段三 舉一反三的使...

IoC容器的使用

通過之前的學習,了解了ioc容器 bean以及元資料metadata。使用ioc容器的順序 編寫beans的型別及介面 配置元資料 啟動ioc容器 同時ioc容器初始化bean 從ioc容器中取出bean使用 public inte ce iuserdao public class userdaoi...

spring建立ioc容器的兩種方式

bean是乙個由spring ioc容器例項化 組裝和管理的物件。第一種方式,基於xml檔案 long countbyexample userexample example int deletebyexample userexample example int deletebyprimarykey ...