关键字: struts2 spring 在Struts2 中整合Spring 的IoC支持是一件十分简单的事情。让我们一步一步来实现:
1)复制struts2 -spring -plugin-x-x-x.jar和相应的spring .jar到/WEB-INF/lib目录下。
2)在struts.properties中设置struts.objectFactory属性值
- struts.objectFactory = spring
或者是在XML文件中进行常量配置
- < struts >
- < constant name = "struts.objectFactory" value = "spring " />
- </ struts >
3)配置Spring 监听器
- < listener >
- < listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class >
- </ listener >
通过Spring 配置来注册对象
- <? 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 = "hello" class = "hpfyeah.struts2 .spring .HelloWorldAction" />
- </ beans >
当然你也可以拥有更多的Spring 配置文件。在web.xml中进行下列设置,从而使Spring 的ApplicationContext通过匹配所给定模式的文件来初始化对象
- <!-- 用来定位Spring XML文件的上下文配置 -->
- < context-param >
- < param-name > contextConfigLocation </ param-name >
- < param-value >
- /WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml
- </ param-value >
- </ context-param >
4)修改你的Struts配置文件
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd" >
- < struts >
- < include file = "struts-default.xml" />
- < package name = "default" extends = "struts-default" >
- < action name = "pureStruts" class = "hpfyeah.struts2 .spring .HelloWorldAction" >
- < result > hello.jsp </ result >
- </ action >
- < action name = "springStruts" class = "hello" >
- < result > hello.jsp </ result >
- </ action >
- </ struts >
默认情况下,Spring 从上面显示的applicationContext.xml文件中寻找为hello所做的配置
5)好了,现在你的Struts2 和Spring 就能正常的一起工作了。有几个配置技术点需要详细说明下:
装配模式 。你可以通过设置修改struts.properties中下列属性的值来改变装配模式。
name | 按照你的action的属性的名字和Spring 里的bean的名字匹配,如果匹配就自动装配。这是缺省的 |
type | 按照你的action的属性的类型,在Spring 注册的bean中查找,如果相同就自动装配。这需要你在Spring 中仅注册了一个此类型的bean |
auto | Spring 会试图自动监测来找到最好的方法自动装配你的action |
constructor | Spring 会自动装配bean的构造函数的参数 |
是否使用类缓存 。你可以通过设置修改struts.properties中下列属性的值来改变是否使用Spring 自身的类缓存机制。可以设定的值为true或false,默认为true。
struts.objectFactory.spring .useClassCache = false