Struts2學習:在struts2中集成Spring

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

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

1.  允許spring來創建ActionInterceptrorResult

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

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

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

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

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容器如SpringPico等集成的方法。覆蓋這個ObjectFactory的類必須繼承ObjectFactory類或者它的任何子類,並且要帶有一個不帶參數的構造方法。在這裏我們用org.apache.struts2.spring.StrutsSpringObjectFactory代替了默認的ObjectFactory

此外,上面我們說了,如果action不是使用Spring ObjectFactory創建的話,插件提供了兩個攔截器來自動裝配action,默認情況下框架使用的自動裝配策略是name,也就是說框架會去Spring中尋找與action屬性名字相同的bean,可選的裝配策略還有:typeautoconstructor,我們可以通過常量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一樣了,現在我們就已經完成了StrutsSpring的集成了。這裏有一點要注意的是,我們還要指定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配置文件被裝載。

 

 
發佈了113 篇原創文章 · 獲贊 6 · 訪問量 49萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章