WebWork2.2中結(jié)合Spring:"新的方式"
本文最后更新為2005-11-28
請(qǐng)以英文版本為準(zhǔn),謝謝.本文不可能實(shí)時(shí)更新.
本文大部分內(nèi)容來(lái)自http://wiki.opensymphony.com/display/WW/Spring,本文主要是把內(nèi)容翻譯過(guò)來(lái)并補(bǔ)充一下內(nèi)容,請(qǐng)以英文版本為準(zhǔn). :)
在WebWork2.2中,spring已經(jīng)作為IOC的支持基礎(chǔ),原有的Spring結(jié)合的方法已經(jīng)分別溶入到XWork和WebWork的源碼中.XWork的IoC將要被拋棄了.
當(dāng)然原有的組合辦法依然有效,一些類改了包名和類名,但是使用方法類似.
在WebWork2.2中,還有一種新的辦法來(lái)結(jié)合Spring.
開啟Spring組合
在WebWork中開啟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á)到你的所有要求.
![]() |
然而,有時(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ì)你是有好處的,如果你需要的話.
和以前版本的區(qū)別
其實(shí)本質(zhì)上是一樣的,主要區(qū)別如下:
- 可以不配置SpringObjectFactoryListenter,直接在webwork.properties里指定.
- 在webwork.properties里可以指定autoWire策略.
SpringObjectFactory里面多了一個(gè)buildAction,用來(lái)根據(jù)前面提到的命名習(xí)慣查找action. (已經(jīng)刪除)
其他
其實(shí)通過(guò)查看源碼可以知道,還有幾個(gè)其他的類,可以做其他的設(shè)置,例如SpringProxyableObjectFactory,SessionContextSpringProxyableObjectFactory等,至于如何使用,那就慢慢研究吧 :)
posted on 2005-09-21 18:28 Scud(飛云小俠) 閱讀(6369) 評(píng)論(13) 編輯 收藏 所屬分類: WEB