?
This document uses PHP Chinese website manual Release
在深入研究如何集成受支持的 Web 框架之前,讓我們先看看對所有 Web 框架都適用的 Spring 配置。(這一節(jié)同樣適用于 Spring 自己的 Web 框架,SpringMVC)。
在 Spring 所支持的輕量級應用模型中,有一個概念叫“分層架構”。在經典的分層架構中,
Web 層只是很多層中的一層...它是服務器端應用的一個入口,它將請求委派給定義在服務層的服務對象
(門面)以滿足業(yè)務用例需求(這些是表現層技術觸及不到的)。在 Spring 中,這些服務對象,以及其他的業(yè)務對象,
數據訪問對象等等,都存在于一個獨立的“businnes context”中,這個context不含有任何 Web
或者表現層的對象(表現層對象諸如 Spring MVC 控制器通常被配置于一個獨立的“presentation context”中)。
這一節(jié)詳細介紹在一個應用中如何配置一個 Spring 容器(WebApplicationContext
)來容納所有的“business beans”。
現在進入細節(jié)部分...所有你需要做的就是在 Web 應用的 web.xml
文件中聲明一個
ContextLoaderListener
,
并且在同一文件里增加一個 contextConfigLocation
<context-param/> ,
這個聲明決定了哪些 Spring XML 配置文件會被加載。
以下是 <listener/> 的配置:
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
Listeners 是在 Servlet API 2.3 版本中才加入的;而 listener 的啟動順序在 Servlet 2.4 版本終于明確。
如果你使用只支持 Servlet 2.2 版本的容器,你可以通過純嵌入方式使用
ContextLoaderServlet
完成相同的功能(就啟動順序而言)。
以下是 <context-param/> 的配置:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext*.xml</param-value> </context-param>
如果沒有指定 contextConfigLocation
的context參數,
ContextLoaderListener
將會查找一個名為 /WEB-INF/applicationContext.xml
的文件加載。
一旦context文件被加載,Spring 通過文件中 bean 的定義創(chuàng)建一個
WebApplicationContext
對象并且將它儲存在 Web 應用的 ServletContext 中。
所有Java Web框架都構建在Servlet API之上,所以,可以使用下面的代碼片斷訪問這個
由 ContextLoaderListener
創(chuàng)建的ApplicationContext。
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
WebApplicationContextUtils
這個類提供了方便的功能,這樣你就不必去記 ServletContext 中屬性的名字。
它的 getWebApplicationContext() 方法在
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
這個鍵值不對應任何對象的時候將返回 null
。
不過,為了避免在應用中得到 NullPointerExceptions
,我們推薦你使用 getRequiredWebApplicationContext()
方法。
這個方法在ApplicationContext 缺失的時候會拋出一個異常。
一旦你獲得了一個 WebApplicationContext
的引用,
就可以通過 bean 的名字或類型來獲得它們。大多數開發(fā)人員通過名字獲得 bean,然后將它們轉換成相應的接口類型。
幸運的是,這一節(jié)中的大多數框架都有更簡單的方法來查詢 bean。我們不僅僅可以更簡單地從 Spring 容器中 得到 bean,我們還可以在控制器中使用 Spring 依賴注入的特性。下面的幾個小節(jié)是每種框架集成策略的詳細描述。