`
KAXU
  • 浏览: 267067 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

WebWork2.2中结合Spring

阅读更多

WebWork2.2中结合Spring


本文大部分内容来自http://wiki.opensymphony.com/display/WW/Spring,本文主要是把内容翻译过来,并加上一些补充,请以英文版本为准.

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

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

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


开启Spring组合

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

Java代码 复制代码
  1. webwork.objectFactory = spring  
		webwork.objectFactory = spring


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

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

Java代码 复制代码
  1. <listener>   
  2.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>   
  3. </listener>  
		<listener>
		    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
		</listener>



Spring配置示例

这时,你可以添加一个标准的Spring配置文件:WEB-INF/applicationContext.xml,举例如下:

Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">   
  3. <beans default-autowire="autodetect">   
  4.     <bean id="personManager" class="com.acme.PersonManager"/>   
  5.     ...   
  6. </beans>  
	
		<?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指定类. 这意味着WebWork首先会创建这个Action,然后按照指定的缺省的自动装配策略来设定依赖的属性. 然而,有时你可能想要Spring来完全管理Bean.这是有实际意义的,例如,你如果想对你的Bean使用AOP或者Spring的相关技术,例如Acegi.为了达到这个目的,你仅仅要做的就是在xwork.xml里移除你的WebWork Action的类的属性,然后在applicationContext.xml里面增加一个Bean.

你的applicationContext.xml应该类似这样:

Java代码 复制代码
  1.   
  2. <?xml version="1.0" encoding="UTF-8"?>   
  3. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">   
  4. <beans default-autowire="autodetect">   
  5.     <bean id="foo" class="com.acme.Foo"/>   
  6.     <bean id="bar" class="com.acme.Foo"/>   
  7. </beans>  
	
	<?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="foo" class="com.acme.Foo"/>
	    <bean id="bar" class="com.acme.Foo"/>
	</beans>



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

Java代码 复制代码
  1. <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.1.dtd">   
  2.   
  3. <xwork>   
  4.     <include file="webwork-default.xml"/>   
  5.   
  6.     <package name="default" extends="webwork-default">   
  7.         <action name="foo" class="foo">   
  8.             <result>foo.ftl</result>   
  9.         </action>   
  10.     </package>   
  11.   
  12.     <package name="secure" namespace="/secure" extends="default">   
  13.         <action name="bar" class="bar">   
  14.             <result>bar.ftl</result>   
  15.         </action>   
  16.     </package>   
  17. </xwork>  
		<!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>



记住:这个不是必需的.仅仅当你需要使用Spring的拦截器或者IoC来修饰Action以便覆盖Webwork的缺省行为时,这才是必要的.要记住一点,WebWorkSpring组合会执行标准的IoC,使用你指定的自动装配策略,即使你没有明确第在Spring中映射每个Action.所以通常你不需要做这个,但是知道可以这样做对你是有好处的,如果你需要的话.


和以前版本的区别
其实本质上是一样的,主要区别如下:
可以不配置SpringObjectFactoryListenter,直接在webwork.properties里指定.
webwork.properties里可以指定autoWire策略.


其他

其实通过查看源码可以知道,还有几个其他的类,可以做其他的设置,例如SpringProxyableObjectFactory,SessionContextSpringProxyableObjectFactory等,至于如何使用,那就慢慢研究吧

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics