開(kāi)啟Spring組合
在WebWork中開(kāi)啟Spring支持是非常簡(jiǎn)單的,把最新版本的Spring的jar放到你的classpath中,然后在webwork.properties里面設(shè)置如下選項(xiàng):
webwork.objectFactory = spring?
此時(shí)使用的類是: com.opensymphony.webwork.spring.WebWorkSpringObjectFactory,也可以指定為其他SpringObjectFactory.
缺省Spring的裝配策略是 by name,可以修改webwork.properties改為其他方式,例如type,name,auto等這時(shí)所有對(duì)象都首先來(lái)用Spring來(lái)創(chuàng)建.如果Spring沒(méi)有創(chuàng)建這些對(duì)象,WebWork會(huì)自己創(chuàng)建這些對(duì)象. 然后,你需要在web.xml里面設(shè)置Spring的listener:
? <listener>
????? <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
? </listener>?
Spring配置示例
?這時(shí),你可以添加一個(gè)標(biāo)準(zhǔn)的Spring配置文件:WEB-INF/applicationContext.xml,舉例如下:
<?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="autodetect">
??????????? <bean id="personManager" class="com.acme.PersonManager"/>
??????????? ...
??????????? </beans>
使用Spring初始化Action
一般來(lái)說(shuō),你在xwork.xml里面為每個(gè)Action指定類.當(dāng)使用SpringObjectFactory的時(shí)候(如果按照上面的方法配置了), 這意味著WebWork會(huì)首先請(qǐng)求Spring創(chuàng)建這個(gè)Action并按照缺省的自動(dòng)裝配策略設(shè)定依賴的屬性.SpringObjectFactory還會(huì)調(diào)用所有bean的處理器來(lái)處理事務(wù),安全等方面的代理機(jī)制.不需要特殊的設(shè)置Spring就可以自動(dòng)確定.對(duì)大多數(shù)的應(yīng)用,這會(huì)配置你的Action所需的服務(wù)和依賴,來(lái)達(dá)到你的所有要求.
?我們強(qiáng)烈推薦你找到一種聲明的方法來(lái)讓spring知道該為你的Action提供什么.這包括把你的Action里的屬性命名為在Spring配子文件里定義的Bean的名字一致,這樣可以實(shí)現(xiàn)基于名字的自動(dòng)裝配,還可以使用JDK5的標(biāo)注來(lái)聲明事務(wù)和安全層需要.如果你能找到方法讓Spring知道你的Action需要什么而且不需要在applicationContext.xml里面進(jìn)行外部配置的話,你就不需要在2個(gè)地方維護(hù)配置了.
?
然而,有時(shí)你可能想要Spring來(lái)完全管理Bean.這是有實(shí)際意義的,例如,你如果想對(duì)你的Bean使用AOP或者Spring的相關(guān)技術(shù),例如Acegi.為了達(dá)到這個(gè)目的,你僅僅要做的就是在xwork.xml里移除你的WebWork Action的類的屬性,然后在applicationContext.xml里面配置這個(gè)Bean.
?
?你的xwork.xml文件里面的action應(yīng)該這樣定義:
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "
http://www.opensymphony.com/xwork/xwork-1.1.dtd
">
<xwork>
? <include file="webwork-default.xml"/>
? <package name="default" extends="webwork-default">
??? <action name="foo" class="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>
</xwork>
Where you have a Spring bean defined in your applicationContext.xml named "bar". Note that the com.acme.Foo action did not need to be changed, because it can be autowired.
(你需要在你的applicationContext.xml里定義一個(gè)名字為"bar"的bean. 注意 com.acme.Foo不需要被改變,因?yàn)樗亲詣?dòng)裝配的.)
?記住:這個(gè)不是必須的.僅僅當(dāng)你需要使用Spring的攔截器或者IoC來(lái)修飾Action以便覆蓋Webwork的缺省行為時(shí),這才是必要的.要記住一點(diǎn),WebWork的Spring組合會(huì)執(zhí)行標(biāo)準(zhǔn)的IoC,使用你指定的自動(dòng)裝配策略,即使你沒(méi)有明確第在Spring中映射每個(gè)Action.所以通常你不需要做這個(gè),但是知道怎么做對(duì)你是有好處的,如果你需要的話.
posted on 2006-08-25 17:30
zhangxl 閱讀(548)
評(píng)論(0) 編輯 收藏 所屬分類:
web