WebWork2.2中结合Spring:新的方式

在WebWork2.2中,spring已经作为IOC的支持基础,原有的Spring结合的方法已经分别溶入到XWork和 WebWork的源码中.XWork的IoC将要被抛弃了.


当然原有的组合办法依然有效,一些类改了包名和类名,但是使用方法类似.

在WebWork2.2中,还有一种新的办法来结合Spring.


开启Spring组合
WebWork中开启Spring支持是非常简单的,把最新版本的Spring的jar放到你的classpath中,然后在 webwork.properties里面设置如下选项:

webwork.objectFactory = spring 


此时使用的类是: com.opensymphony.webwork.spring.WebWorkSpringObjectFactory,也可以指定为其他SpringObjectFactory.

缺省Spring的装配策略是 by name,可以修改 webwork.properties改为其他方式,例如type,name,auto等



这时所有对象都首先来用Spring来创建.如果Spring没有创建这些对象,WebWork会自己创建这些对象. 然后,你需要在web.xml里面设置Spring的listener:

  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener> 


Spring配置示例
这时,你可以添加一个标准的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
一般来说,你在xwork.xml里面为每个Action指定类.当使用SpringObjectFactory的时候(如果按照上面的方法配置了), 这意味着 WebWork会首先请求Spring创建这个Action并按照缺省的自动装配策略设定依赖的属性.SpringObjectFactory还会调用所有bean的处理器来处理事务,安全等方面的代理机制.不需要特殊的设置Spring就可以自动确定.对大多数的应用,这会配置你的Action 所需的服务和依赖,来达到你的所有要求.

我们强烈推荐你找到一种声明的方法来让spring知道该为你的Action提供什么.这包括把你的Action里的属性命名为在Spring配子文件里定义的Bean 的名字一致,这样可以实现基于名字的自动装配,还可以使用JDK5的标注来声明事务和安全层需要.如果你能找到方法让Spring知道你的Action需要什么而且不需要在applicationContext.xml里面进行外部配置的话,你就不需要在2个地方维护配置了.



然而,有时你可能想要Spring来完全管理Bean.这是有实际意义的,例如,你如果想对你的Bean使用AOP或者Spring的相关技术,例如Acegi.为了达到这个目的,你仅仅要做的就是在xwork.xml里移除你的 WebWork Action的类的属性,然后在applicationContext.xml里面配置这个Bean.

你的xwork.xml文件里面的action应该这样定义:

<!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里定义一个名字为"bar"的bean. 注意 com.acme.Foo不需要被改变,因为它是自动装配的.)


记住:这个不是必须的.仅仅当你需要使用Spring的拦截器或者IoC来修饰Action以便覆盖 Webwork的缺省行为时,这才是必要的.要记住一点,WebWork的Spring组合会执行标准的IoC,使用你指定的自动装配策略,即使你没有明确第在Spring中映射每个Action.所以通常你不需要做这个,但是知道怎么做对你是有好处的,如果你需要的话.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值