Struts2整合Spring方法及原理

1、   Struts 2框架整合Spring步驟web

一、 複製文件。複製struts2-spring-plugin-x-x-x.jar和spring.jar到WEB-INF/lib目錄下。其中的x對應了Spring的版本號。還須要複製commons-logging.jar文件到WEB-INF/lib目錄下。spring

二、 配置struts.objectFactory屬性值。在struts.properties中設置struts.objectFactory屬性值:struts.objectFactory = springapache

或者在XML文件中進行常量配置:session

<struts>app

       <constant name="struts.objectFactory" value="spring" />框架

       ...ide

</struts>spa

三、 配置Spring監聽器。在web.xml文件中增長以下內容:.net

<listener>插件

       <listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

四、 Spring配置文件。默認狀況下,Spring配置文件爲applicationContext.xml,該文件須要保存在Web應用的WEB-INF目錄下。內容示例以下所示:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC

       "-//SPRING//DTD BEAN//EN"

       "http://www.springframework.org/dtd/spring-beans.dtd">

<beans default-autowire="byName">

       <bean id="personManager" class="com.acme.PersonManager"/>

</beans>

開發者實際上可使用多個Spring配置文件,在web.xml中進行下列設置,從而使Spring的ApplicationContext經過匹配所給定模式的文件來初始化對象:

<!-- 用來定位Spring XML文件的上下文配置 -->

<context-param>

       <param-name>contextConfigLocation</param-name>

<param-value>

/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml

</param-value>

</context-param>

五、 修改Struts配置文件。Struts 2框架整合Spring框架,須要在Struts配置文件中有所改變,下面是一個示例:

<!DOCTYPE struts PUBLIC

       "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

       "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

       <include file="struts-default.xml"/>

       <package name="default" extends="struts-default">

           <action name="foo" class="com.acme.Foo">

               <result>foo.ftl</result>

           </action>

       </package>

       <package name="secure" namespace="/secure" extends="default">

           <action name="bar" class="bar">

               <result>bar.ftl</result>

           </action>

       </package>

</struts>

該配置文件中定義了兩個Action配置:foo是一個標準的Struts 2框架Action配置,指定了Action實現類爲com.acme.Foo;bar對應的class並不存在,那麼框架將在Spring配置文件中查找id屬性爲「bar」的定義,該配置文件以下所示:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC

       "-//SPRING//DTD BEAN//EN"

       "http://www.springframework.org/dtd/spring-beans.dtd">

<beans default-autowire="byName">

       <bean id="bar" class="com.my.BarClass" singleton="false"/>

       ...

</beans>

 

2、整合原理
Struts2與Spring的集成要用到Spring插件包struts2-spring-plugin-x-x-x.jar,這個包是同Struts2一塊兒發佈的。Spring插件是經過覆蓋(override)Struts2的ObjectFactory來加強核心框架對象的建立。當建立一個對象的時候,它會用Struts2配置文件中的class屬性去和Spring配置文件中的id屬性進行關聯,若是能找到,則由Spring建立,不然由Struts 2框架自身建立而後由Spring來裝配。Spring插件具體有以下幾個做用:

容許Spring建立Action、Interceptror和Result。

由Struts建立的對象可以被Spring裝配。

若是沒有使用Spring ObjectFactory,提供了2個攔截器來自動裝配action

 

 開發者沒必要在Spring中去註冊action,儘管能夠這麼去作,一般Struts框架會自動地從action mapping中建立action對象

 

struts2-spring-plugin-x-x-x.jar插件中有一個struts-plugin.xml文件,該文件內容以下所示:

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />

   

    <!--  設置Spring對象工廠爲自動 -->

    <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 2框架常量struts.objectFactory的值爲spring,實際上,spring是org.apache.struts2.spring.StrutsSpringObjectFactory類的縮寫,默認狀況下全部由Struts 2框架建立的對象都是由ObjectFactory實例化的,ObjectFactory提供了與其餘IoC容器如Spring、Pico等集成的方法。覆蓋這個ObjectFactory的類必須繼承ObjectFactory類或者它的任何子類,而且要帶有一個不帶參數的構造方法。在這裏用org.apache.struts2.spring.StrutsSpring ObjectFactory代替了默認的ObjectFactory。

若是Action不是使用Spring ObjectFactory建立的話,插件提供了兩個攔截器來自動裝配Action,默認狀況下框架使用的自動裝配策略是name,也就是說框架會去Spring中尋找與Action屬性名字相同的bean,可選的裝配策略還有:type、auto、constructor,開發者能夠經過常量struts.objectFactory.spring.autoWire來進行設置。 

 

Struts 2框架整合Spring後,處理用戶請求的Action並非Struts框架建立的,而是由Spring插件建立的。建立實例時,不是利用配置Action時指定的class屬性值,根據bean的配置id屬性,從Spring容器中得到相應的實例。


原文地址:http://blog.csdn.net/vickyway/article/details/7562246

相關文章
相關標籤/搜索