程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 在struts2中集成Spring

在struts2中集成Spring

編輯:關於JAVA

Spring的官方定義是:一個輕量級的IoC和Aop容器框架,它使用了一種叫做依賴注入的技術。所謂依賴注入,就是指將創建對象以及協議依賴對象之間合作的責任從對象自身中轉移到“工廠”中去,這個“工廠”通常由IoC容器提供。

Struts2與Spring的集成要用到Spring插件包,這個包是同Struts2一起發布的。Spring插件是通過覆蓋(override)Struts2的ObjectFactory來增強核心框架對象的創建。當創建一個對象的時候,它會用Struts2配置文件中的class屬性去和Spring配置文件中的id屬性進行關聯,如果能找到則由Spring創建,否則由Struts2框架自身創建,然後由Spring來裝配。Spring插件具體有如下幾個作用:

1.允許spring來創建Action、Interceptror和Result

2.由Struts創建的對象能夠被Spring裝配

3.提供了2個攔截器來自動裝配action,如果沒有使用Spring ObjectFactory的話

這裡要注意的是,我們不必在Spring中去注冊action,盡管我們可以這麼去做,通常Struts框架會自動的從action mapping中創建action對象。

要實現與Struts與Spring的集成有如下幾步

1.將struts2-spring-plugin-2.0.8.jar文件包含到我們的應用中,放到WEB-INF/lib目錄下面即可。在這個插件包中有個struts-plugin.xml文件,它的內容如下:

<struts>
<bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />
<constant name="struts.objectFactory" value="spring" />
<package name="spring-default">
<interceptors>
<interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
<interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>
</interceptors>
</package>
</struts>

這裡它將框架常量struts.objectFactory覆蓋了,設置為”spring”,其實這裡是使用了縮寫,我們可以寫全稱:org.apache.struts2.spring.StrutsSpringObjectFactory。這個縮寫的”spring”是和bean配置中的name屬性相對應的。默認情況下所有由框架創建的對象都是由ObjectFactory實例化的,ObjectFactory提供了與其它IoC容器如Spring、Pico等集成的方法。覆蓋這個ObjectFactory的類必須繼承ObjectFactory類或者它的任何子類,並且要帶有一個不帶參數的構造方法。在這裡我們用org.apache.struts2.spring.StrutsSpringObjectFactory代替了默認的ObjectFactory。

此外,上面我們說了,如果action不是使用Spring ObjectFactory創建的話,插件提供了兩個攔截器來自動裝配action,默認情況下框架使用的自動裝配策略是name,也就是說框架會去Spring中尋找與action屬性名字相同的bean,可選的裝配策略還有:type、auto、constructor,我們可以通過常量struts.objectFactory.spring.autoWire來進行設置。

2.配置Spring監聽器,將Spring.jar包包含到應用中

將下面一段話插入到web.xml文件中,同時將spring.jar文件放到WEB-INF/lib目錄下面。

<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>

3.利用Spring配置文件來注冊對象

這之後的步驟就和我們使用單獨使用Spring一樣了,現在我們就已經完成了Struts與Spring的集成了。這裡有一點要注意的是,我們還要指定Spring配置文件的地點,默認情況下,容器會到WEB-INF目錄下面去尋找applicationContext.xml文件。如果我們想指定別的地方的配置文件或者指定多個配置文件,可以通過在web.xml文件中定義context-param元素來指定,如下所示:

<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext.xml,classpath:applicationContext-*.xml </param-value> </context-param>

上面一段話表示WEB-INF下面的applicationContext.xml文件以及classpath下面的所有匹配applicationContext-*.xml模式的文件都會作為Spring配置文件被裝載。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved