WebWork 2.1 / 2.2 與 Spring 集成方法總結(jié)
作者:高巍
第一部分:WebWork2.1與Spring集成
兩種方法:
法一:先WebWork后Spring(利用webwork2-spring.jar集成)
該方法的執(zhí)行順序是先WebWork,后Spring。
即,首先在xwork.xml中找到待執(zhí)行的action,如果該action依賴(lài)其他bean,再到applicationContext.xml中查找被依賴(lài)的bean。
WebWork2的IoC功能實(shí)現(xiàn)是在xwork.xml中,指定action類(lèi)與其他bean的依賴(lài)關(guān)系。即:
(1)xwork.xml文件
<action name="myAction" class="com.ryandaigle.web.actions.MyAction">
<external-ref name="DAO">myDAO</external-ref>
<result name="success" type="dispatcher">
<param name="location">/success.jsp</param>
</result>
</action>
(2)applicationContext.xml文件
<bean id="myDAO" class="com.ryandaigle.persistence.MyDAO" singleton="true" />
具體集成步驟如下:
1. 下載以下文件:
http://www.ryandaigle.com/pebble/images/webwork2-spring.jar
2. 配置xwork.xml
2.1 在xwork.xml中定義action時(shí),采用external-ref來(lái)指定依賴(lài)的spring bean
<action name="myAction" class="com.foo.Action">
<external-ref name="someDao">someDao</external-ref>
<result name="success" type="dispatcher">
<param name="location">/success.jsp</param>
</result>
</action>
2.2 在<package>中指定外部引用解析器
<package name="default" extends="webwork-default"
externalReferenceResolver="com.atlassian.xwork.ext.SpringServletContextReferenceResolver"/>
SpringServletContextReferenceResolver作用是在applicationContext.xml中解析外部引用的bean
2.3 增加一個(gè)攔截器,允許引用作為外部資源進(jìn)行解析
<interceptors>
<interceptor name="reference-resolver" class="com.opensymphony.xwork.interceptor.ExternalReferencesInterceptor"/>
<interceptor-stack name="myDefaultWebStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="reference-resolver"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myDefaultWebStack"/>
3. 在web.xml中配置Spring與XWork的外部解析器在同一個(gè)Web Context中工作
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>com.atlassian.xwork.ext.ResolverSetupServletContextListener</listener-class>
</listener>
第一個(gè)偵聽(tīng)器是spring必需的,無(wú)論是否與WebWork集成,都要定義該偵聽(tīng)器;第二個(gè)偵聽(tīng)器是外部解析器所需要的,作用是通過(guò)ServletContext來(lái)取出Spring的ApplicationContext,作為WebWork與Spring的“橋梁”。
4.在applicationContext.xml中定義被引用的bean
<bean id="myDAO" class="com.ryandaigle.persistence.MyDAO" singleton="true" />
說(shuō)明:
如果不使用WebWork2,完全使用Spring,達(dá)到上述效果,在applicationContext.xml中采取類(lèi)似定義:
<bean id="myAction" class="com.ryandaigle.web.actions.MyAction" singleton="false">
<property name="DAO">
<ref bean="myDAO"/>
</property>
<bean id="myDAO" class="com.ryandaigle.persistence.MyDAO" singleton="true" />
法二:先Spring后WebWork(利用spring-xwork-integration.jar集成)
該方法的執(zhí)行順序是先Spring,后WebWork。
即,首先由Spring負(fù)責(zé)wire所有的依賴(lài)關(guān)系,再由XWork來(lái)執(zhí)行action。
注意:因?yàn)閄Work為每個(gè)action調(diào)用生成一個(gè)新的類(lèi)實(shí)例,action在Spring的applicationContext.xml中應(yīng)該配置為prototype。
1. 配置SpringObjectFactory
(0)下載https://xwork-optional.dev.java.net/files/documents/1475/11992/spring-xwork-integration.jar
(1) 可以在web.xml配置
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>com.opensymphony.xwork.spring.SpringObjectFactoryListener</listener-class>
</listener>
(2) 或者:在applicationContext.xml配置
<bean id="springObjectFactory"
class="com.opensymphony.xwork.spring.SpringObjectFactory"
init-method="initObjectFactory"/>
以上兩種方法任選一種即可
2. 在applicationContext.xml中定義bean
<bean name="some-action" class="fully.qualified.class.name" singleton="false">
<property name="someProperty"><ref bean="someOtherBean"/></property>
</bean>
3. 在xwork.xml中定義action(注意action的class與bean的id相同)
<action name="myAction" class="some-action">
<result name="success">view.jsp</result>
</action>
說(shuō)明:
該方法與WebWork 2.2中的方法基本相同。
第二部分:WebWork2.2與Spring的集成
Spring是WebWork2.2中唯一支持的IoC容器。
1 配置webwork.properties文件,指定spring作為webwork的IoC容器
webwork.objectFactory = spring
(1)默認(rèn)的autowiring模式是:by name
即如果applicationContext.xml文件中的bean id與xwork.xml文件中的action name相同,就
(2)如果要改為其他模式:
webwork.objectFactory.spring.autoWire = name|type|auto|constructor
2 配置web.xml文件,啟動(dòng)Spring偵聽(tīng)器
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3 在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>
4 設(shè)置由Spring來(lái)初始化action
4.1 在Spring的applicationContext.xml文件中配置bean(即action類(lèi))
4.2 將xwork.xml中的action的class屬性,由class名改為Spring中定義的bean名
例如:
(1)applicationContext.xml中,定義bean id是bar
<beans default-autowire="autodetect">
<bean id="bar" class="com.my.BarClass" singleton="false"/>
...
</beans>
(2)xwork.xml中,action的class="bar",而不是通常的類(lèi)名
<package name="secure" namespace="/secure" extends="default">
<action name="bar" class="bar">
<result>bar.ftl</result>
</action>
</package>
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=583291
posted on 2007-04-02 02:26
安文豪 閱讀(1383)
評(píng)論(0) 編輯 收藏