spring源代碼解析(二)ioc容器在web中啟動(dòng)_第1頁(yè)
已閱讀1頁(yè),還剩11頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、往鏈點(diǎn)點(diǎn)通共享資源,了解更多請(qǐng)登錄上面我們分析了IOC容器本身的實(shí)現(xiàn),下面我們看看在典型的web環(huán)境中,SpringIOC容器是怎樣被載入和起作用的。簡(jiǎn)單的說(shuō),在web容器中,通過(guò)ServletContext為Spring的IOC容器提供宿主環(huán)境,對(duì)應(yīng)的建立起一個(gè)IOC容器的體系。其中,首先需要建立的是根上下文,這個(gè)上下文持有的對(duì)象可以有業(yè)務(wù)對(duì)象,數(shù)據(jù)存取對(duì)象,資源,事物管理器等各種中間層對(duì)象。在這個(gè)上下文的基礎(chǔ)上,和webMVC相關(guān)還

2、會(huì)有一個(gè)上下文來(lái)保存控制器之類(lèi)的MVC對(duì)象,這樣就構(gòu)成了一個(gè)層次化的上下文結(jié)構(gòu)。在web容器中啟動(dòng)Spring應(yīng)用程序就是一個(gè)建立這個(gè)上下文體系的過(guò)程。Spring為web應(yīng)用提供了上下文的擴(kuò)展接口WebApplicationContext:Java代碼1.publicinterfaceWebApplicationContextextendsApplicationContext2.這里定義的常量用于在ServletContext中存取根

3、上下文3.StringROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE=WebApplicationContext.class.getName()“.ROOT“4.......5.對(duì)WebApplicationContext來(lái)說(shuō),需要得到Web容器的ServletContext6.ServletContextgetServletContext()7.而一般的啟動(dòng)過(guò)程,Spring會(huì)使用一個(gè)默認(rèn)的實(shí)現(xiàn),XmlW

4、ebApplicationContext這個(gè)上下文實(shí)現(xiàn)作為在web容器中的根上下文容器被建立起來(lái),具體的建立過(guò)程在下面我們會(huì)詳細(xì)分析。Java代碼1.publicclassXmlWebApplicationContextextendsAbstractRefreshableWebApplicationContext2.33.if(getNamespace()!=null)34.returnnewString[]DEFAULT_CONFIG

5、_LOCATION_PREFIXgetNamespace()DEFAULT_CONFIG_LOCATION_SUFFIX35.36.else37.returnnewString[]DEFAULT_CONFIG_LOCATION38.39.40.對(duì)于一個(gè)Spring激活的web應(yīng)用程序,可以通過(guò)使用Spring代碼聲明式的指定在web應(yīng)用程序啟動(dòng)時(shí)載入應(yīng)用程序上下文(WebApplicationContext)Spring的Context

6、Loader是提供這樣性能的類(lèi),我們可以使用ContextLoaderServlet或者ContextLoaderListener的啟動(dòng)時(shí)載入的Servlet來(lái)實(shí)例化SpringIOC容器為什么會(huì)有兩個(gè)不同的類(lèi)來(lái)裝載它呢,這是因?yàn)樗鼈兊氖褂眯枰獏^(qū)別不同的Servlet容器支持的Serlvet版本。但不管是ContextLoaderSevlet還是ContextLoaderListener都使用ContextLoader來(lái)完成實(shí)際的Web

7、ApplicationContext的初始化工作。這個(gè)ContextLoder就像是SpringWeb應(yīng)用程序在Web容器中的加載器booter。當(dāng)然這些Servlet的具體使用我們都要借助web容器中的部署描述符來(lái)進(jìn)行相關(guān)的定義。下面我們使用ContextLoaderListener作為載入器作一個(gè)詳細(xì)的分析,這個(gè)Servlet的監(jiān)聽(tīng)器是根上下文被載入的地方,也是整個(gè)Springweb應(yīng)用加載上下文的第一個(gè)地方;從加載過(guò)程我們可以看到

8、,首先從Servlet事件中得到ServletContext,然后可以讀到配置好的在web.xml的中的各個(gè)屬性值,然后ContextLoder實(shí)例化WebApplicationContext并完成其載入和初始化作為根上下文。當(dāng)這個(gè)根上下文被載入后,它被綁定到web應(yīng)用程序的ServletContext上。任何需要訪問(wèn)該ApplicationContext的應(yīng)用程序代碼都可以從WebApplicationContextUtils類(lèi)的靜態(tài)

9、方法來(lái)得到:Java代碼1.WebApplicationContextgetWebApplicationContext(ServletContextsc)以Tomcat作為Servlet容器為例,下面是具體的步驟:1.Tomcat啟動(dòng)時(shí)需要從web.xml中讀取啟動(dòng)參數(shù),在web.xml中我們需要對(duì)ContextLoaderListener進(jìn)行配置,對(duì)于在web應(yīng)用啟動(dòng)入口是在ContextLoaderListener中的初始化部分;從

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論