首先,來看看如何讓Spring 來管理Action.
在struts.xml中加入
<constant name="struts.objectFactory" value="spring" />
有兩種整合方式:
(1) 把Action配置在beans.xml里,利用Spring初始化Action的bean:
將Struts的業(yè)務(wù)邏輯控制器類配置在Spring的配置文件中,Action中引用的業(yè)務(wù)類一并注入。
(這樣的處理,必須將action類的scope配置成property)
Xml代碼
<bean id="LoginAction" class="yaso.struts.action.LoginAction">
<property name="loginDao" ref="LoginDao"/>
</bean>
接著,在struts.xml或者等效的Struts2配置文件中配置Action時(shí),指定<action>的class屬性為Spring配置文件中相應(yīng)bean的id或者name值。示例如下:
Xml代碼
<action name=”LoginAction” class=”LoginAction”>
<result name=”success”>/index.jsp</result>
</action>
(2) 不需要在beans.xml里配置Action,利用Struts-Spring_Plugin插件自動(dòng)初始化Action:
業(yè)務(wù)類在Spring配置文件中配置,Action不需要配置,Struts2的Action像沒有整合Spring之前一樣配置,<action>的class屬性指定業(yè)務(wù)邏輯控制器類的全限定名。
Action中引用的業(yè)務(wù)類不需要自己去初始化,Struts2的Spring插件會(huì)使用bean的自動(dòng)裝配將業(yè)務(wù)類注入進(jìn)來,其實(shí)Action也不是Struts2創(chuàng)建的,而是Struts2的Spring插件創(chuàng)建的。默認(rèn)情況下,插件使用by name的方式裝配,可以通過增加Struts2常量來修改匹配方式:設(shè)置方式為:struts.objectFactory.spring.autoWire = typeName,可選的裝配參數(shù)如下:
name:相當(dāng)于spring配置的autowrie="byName"(默認(rèn))
type:相當(dāng)于spring配置的autowrie="byType"
auto:相當(dāng)于spring 配置的autowrie="autodetect"
constructor: 相當(dāng)于spring配置的autowrie="constructor"
OK,這里說了配置部分,但是,這里有一個(gè)問題, 就是Spring管理Action,如果按照第一方式,那么只要通過scope="property"來配置為每個(gè)請(qǐng)求創(chuàng)建一個(gè)Action實(shí)例。 那么第二種方式,我們并沒有指定Action的作用域。
(好似也沒有地方可配……),那么,這樣的整合方式,Action的創(chuàng)建到底是單例還是多例的呢?
答案:也是每個(gè)請(qǐng)求一個(gè)實(shí)例.
聯(lián)系客服