??xml version="1.0" encoding="utf-8" standalone="yes"?> 两种ҎQ?/p>
该方法的执行序是先WebWorkQ后Spring?br />卻I首先在xwork.xml中找到待执行的actionQ如果该action依赖其他beanQ再到applicationContext.xml中查找被依赖的bean?/p>
WebWork2的IoC功能实现是在xwork.xml中,指定actioncM其他bean的依赖关pR即Q?br />(1)xwork.xml文g (2)applicationContext.xml文g 具体集成步骤如下Q?/p>
1. 下蝲以下文gQ?br />http://www.ryandaigle.com/pebble/images/webwork2-spring.jar 2. 配置xwork.xml 2.1 在xwork.xml中定义actionӞ采用external-ref来指定依赖的spring bean <action name="myAction" class="com.foo.Action"> <result name="success" type="dispatcher"> 2.2 ?lt;package>中指定外部引用解析器 <package name="default" extends="webwork-default" SpringServletContextReferenceResolver作用是在applicationContext.xml中解析外部引用的bean 2.3 增加一个拦截器Q允许引用作为外部资源进行解?br /><interceptors> 3. 在web.xml中配|Spring与XWork的外部解析器在同一个Web Context中工?br /><!--载入spring配置文g--> <listener> W一个侦听器是spring必需的,无论是否与WebWork集成Q都?a onclick="javascript:tagshow(event, '%B6%A8%D2%E5');" href="javascript:;" target="_self">定义该侦听器Q第二个侦听器是外部解析器所需要的Q作用是通过ServletContext来取出Spring的ApplicationContextQ作为WebWork与Spring的“桥梁”?/p>
4.applicationContext.xml文g跟xwork.xml文g的存放\径一下,都在classpath?br />在applicationContext.xml中定义被引用的bean 说明Q?br />如果不用WebWork2Q完全用SpringQ达Cq?a onclick="javascript:tagshow(event, '%D0%A7%B9%FB');" href="javascript:;" target="_self">效果Q在applicationContext.xml中采取类似定义: 该方法的执行序是先SpringQ后WebWork?br />卻I首先由Spring负责wire所有的依赖关系Q再由XWork来执行action?/p>
注意Q因为XWork为每个action调用生成一个新的类实例Qaction在Spring的applicationContext.xml中应?a onclick="javascript:tagshow(event, '%C5%E4%D6%C3');" href="javascript:;" target="_self">配置为prototype?/p>
1. 配置SpringObjectFactory (0)下蝲https://xwork-optional.dev.java.net/files/documents/1475/11992/spring-xwork-integration.jar (1) 可以在web.xml配置 <listener> <listener> (2) 或者:在applicationContext.xml配置 以上两种Ҏ任选一U即?/p>
2. 在applicationContext.xml中定义bean 3. 在xwork.xml中定义actionQ注意action的class与bean的id相同Q?/p>
<action name="myAction" class="some-action"> 说明Q?br />该方法与WebWork 2.2中的Ҏ基本相同?br /> Spring是WebWork2.2中唯一支持的IoC容器?/p>
1 配置webwork.properties文gQ指定spring作ؓwebwork的IoC容器 2 配置web.xml文gQ启动Spring侦听?br /><listener> 3 在WEB-INF目录下增加applicationContext.xml文g 4 讄由Spring来初始化action法一Q先WebWork后SpringQ利用webwork2-spring.jar集成Q?/h5>
<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>
<bean id="myDAO" class="com.ryandaigle.persistence.MyDAO" singleton="true" />
<external-ref name="someDao">someDao</external-ref>
<param name="location">/success.jsp</param>
</result>
</action>
externalReferenceResolver="com.atlassian.xwork.ext.SpringServletContextReferenceResolver"/>
<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"/>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener-class>com.atlassian.xwork.ext.ResolverSetupServletContextListener</listener-class>
</listener>
<bean id="myDAO" class="com.ryandaigle.persistence.MyDAO" singleton="true" />
<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" />法二Q先Spring后WebWorkQ利用spring-xwork-integration.jar集成Q?/h5>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener-class>com.opensymphony.xwork.spring.SpringObjectFactoryListener</listener-class>
</listener>
<bean id="springObjectFactory"
class="com.opensymphony.xwork.spring.SpringObjectFactory"
init-method="initObjectFactory"/>
<bean name="some-action" class="fully.qualified.class.name" singleton="false">
<property name="someProperty"><ref bean="someOtherBean"/></property>
</bean>
<result name="success">view.jsp</result>
</action>
W二部分QWebWork2.2与Spring的集?/strong>
webwork.objectFactory = spring
(1)默认的autowiring模式是:by name
卛_果applicationContext.xml文g中的bean id与xwork.xml文g中的action name相同Q就
(2)如果要改为其他模式:
webwork.objectFactory.spring.autoWire = name|type|auto|constructor
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
例:
<?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.1 在Spring的applicationContext.xml文g中配|beanQ即actionc)
4.2 xwork.xml中的action的class属性,由class名改为Spring中定义的bean?br />例如Q?br />(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"Q而不是通常的类?br /><package name="secure" namespace="/secure" extends="default">
<action name="bar" class="bar">
<result>bar.ftl</result>
</action>
</package>
摘自Q?a >http://www.cnblogs.com/harryguo/archive/2008/05/23/1205765.html
]]>
q种Ҏ看v来比较烦?(q里描述的和spring文档里的有些区别,q种Ҏ可按spring文档里的做法)
W一??a name="baidusnap0">web.xml里面增加一个listener,如下
W二??span class="hilite1">Spring里面配置cMDao之类的bean,例如
W三?配置XWork.xml,例如
2.SpringObjectFactory
我一直用q种Ҏ,因ؓ以前觉得是xwork本n提供的方?升有保?
配置Ҏ:
W一??span class="hilite1">spring?applicationContext.xml (Ҏ实际情况军_) 里面定义你的action,例如
可以看到,可以使用Spring的特性来l你的action讄属性等,当然也可以?span class="hilite1">Spring的拦截器{?(可以使用不一定等于推荐?
注意一定是singleton="false",因ؓxwork的action是这栯求的.
W二?在xwork.xml里定义你的action定义
W三?要上面的关联生?q要用我们的SpringObjectFactory来替换Xwork的默认ObjectFactory.
最新的SpringObjectFactory里面,有两U方?其中我觉得AҎ更直观一?
A:修改web.xml
B.?span class="hilite1">spring的applicationContext.xml (Ҏ实际情况军_)里面定义一个bean,例如
q样Spring会自动调用initObjectFactoryҎ来替换Xwork的默认ObjectFactory
3.ActionAutowiringInterceptor
q个Ҏ是最q出现的,可能是最z的Ҏ,但是不知道性能上有没有问题,我觉得jdk1.4以后应该没有M问题?至于实际效果你的自己试一?
W一?配置web.xml
W二步配|xwork.xml里面的拦截器
你的拦截器里都要包含autowire,例如q个autowireDefaultq当于以前的默认的拦截器了.
其中的拦截器{略可以配置,上面配置的是Ҏcd,如果不配|?默认是根据名?
一共有四种{略:
AUTOWIRE_CONSTRUCTOR
AUTOWIRE_BY_TYPE
AUTOWIRE_BY_NAME
AUTOWIRE_AUTODETECT
q种Ҏ执行原理是查找你的action的所有字D?如果?span class="hilite1">Spring的定义bean有相同的,p动设|?
假设你的Spring的applicationContext.xml里面有这样一个定?
如果你在xwork.xml 里面定义的某个action有一个字D叫userManager,那么在运行时d会自动被讄?span class="hilite1">Spring的配|文仉定义的Bean.