2008年9月5日星期五

Sping-Struts2集成

Struts2和Spring的集成要用到Spring插件包,这个包是同 Struts2一起发布的。Spring插件是通过覆盖(override)Struts2的ObjectFactory来增强核心框架对象的创建。当创建一个对象的时候,他会用Struts2配置文档中的class属性去和Spring配置文档中的id属性进行关联,假如能找到则由Spring创建,否则由Struts2框架自身创建,然后由Spring来装配。Spring插件具体有如下几个作用:
1. 允许spring来创建Action、Interceptror和Result
2. 由Struts创建的对象能够被Spring装配
3. 提供了2个拦截器来自动装配action,假如没有使用Spring ObjectFactory的话
这里要注意的是,我们不必在Spring中去注册action,尽管我们能够这么去做,通常Struts框架会自动的从action mapping中创建action对象。
要实现和Struts和Spring的集成有如下几步:
一>.
将struts2-spring-plugin-2.0.8.jar文档包含到我们的应用中,放到WEB-INF/lib目录下面即可。在这个插件包中有个struts-plugin.xml文档,他的内容如下:

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />

<!-- Make the Spring object factory the automatic default -->
<constant name="struts.objectFactory" value="spring" />
<package name="spring-default">
<interceptors>
<interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
<interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>
</interceptors>
</package>
</struts>
这里他将框架常量struts.objectFactory覆盖了,配置为”spring”,其实这里是使用了缩写,我们能够写全称: org.apache.struts2.spring.StrutsSpringObjectFactory。这个缩写的”spring”是和bean配置中的name属性相对应的。默认情况下任何由框架创建的对象都是由ObjectFactory实例化的,ObjectFactory提供了和其他IoC 容器如Spring、Pico等集成的方法。覆盖这个ObjectFactory的类必须继承ObjectFactory类或他的任何子类,并且要带有一个不带参数的构造方法。在这里我们用org.apache.struts2.spring.StrutsSpringObjectFactory代替了默认的ObjectFactory。

此外,上面我们说了,假如action不是使用Spring ObjectFactory创建的话,插件提供了两个拦截器来自动装配action,默认情况下框架使用的自动装配策略是name,也就是说框架会去 Spring中寻找和action属性名字相同的bean,可选的装配策略更有:type、auto、constructor,我们能够通过常量 struts.objectFactory.spring.autoWire来进行配置。

二>.配置Spring监听器,将Spring.jar包包含到应用中
将下面一段话插入到web.xml文档中,同时将spring.jar文档放到WEB-INF/lib目录下面。

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

三>.利用Spring配置文档来注册对象

这之后的步骤就和我们使用单独使用Spring相同了,现在我们就已完成了Struts和Spring的整合了。这里有一点要注意的是,我们还要指定Spring配置文档的地点,默认情况下,容器会到WEB-INF目录下面去寻找applicationContext.xml文档。假如我们想指定别的地方的配置文档或指定多个配置文档,能够通过在web.xml文档中定义context-param元素来指定,如下所示:

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml,classpath:applicationContext-*.xml
</param-value>
</context-param>
上面一段话表示WEB-INF下面的applicationContext.xml文档连同classpath下面的任何匹配applicationContext-*.xml模式的文档都会作为Spring配置文档被装载。

标签:

0 条评论:

发表评论

订阅 博文评论 [Atom]

<< 主页