一、 struts 2框架spring步骤
1、 复制文件。复制struts2-spring-plugin-x-x-x.jar和spring.jar到web-inf/lib目录下。其中的x对应了spring的版本号。还需要复制commons-logging.jar文件到web-inf/lib目录下。
2、 配置struts.objectfactory属性值。在struts.properties中设置struts.objectfactory属性值:struts.objectfactory = spring
或者在xml文件中进行常量配置:
...
3、 配置spring监听器。在web.xml文件中增加如下内容:
org.springframework.web.context.contextloaderlistener
4、 spring配置文件。默认情况下,spring配置文件为applicationcontext.xml,该文件需要保存在web应用的web-inf目录下。内容示例如下所示:
"-//spring//dtd bean//en"
"http://www.springframework.org/dtd/spring-beans.dtd">
开发者实际上可以使用多个spring配置文件,在web.xml中进行下列设置,从而使spring的applicationcontext通过匹配所给定模式的文件来初始化对象:
/web-inf/applicationcontext-*.xml,classpath*:applicationcontext-*.xml
5、 修改struts配置文件。struts 2框架整合spring框架,需要在struts配置文件中有所改变,下面是一个示例:
"-//apache software foundation//dtd struts configuration 2.0//en"
"http://struts.apache.org/dtds/struts-2.0.dtd">
该配置文件中定义了两个action配置:foo是一个标准的struts 2框架action配置,指定了action实现类为com.acme.foo;bar对应的class并不存在,那么框架将在spring配置文件中查找id属性为“bar”的定义,该配置文件如下所示:
"-//spring//dtd bean//en"
"http://www.springframework.org/dtd/spring-beans.dtd">
...
二、整合 struts2与spring的集成要用到spring插件包struts2-spring-plugin-x-x-x.jar,这个包是同struts2一起发布的。spring插件是通过覆盖(override)struts2的objectfactory来增强核心框架对象的创建。当创建一个对象的时候,它会用struts2配置文件中的class属性去和spring配置文件中的id属性进行关联,如果能找到,则由spring创建,否则由struts 2框架自身创建,然后由spring来装配。spring插件具体有如下几个作用:
— 允许spring创建action、interceptror和result。
— 由struts创建的对象能够被spring装配。
— 如果没有使用spring objectfactory,提供了2个拦截器来自动装配action。
开发者不必在spring中去注册action,尽管可以这么去做,通常struts框架会自动地从action mapping中创建action对象
struts2-spring-plugin-x-x-x.jar插件中有一个struts-plugin.xml文件,该文件内容如下所示:
"-//apache software foundation//dtd struts configuration 2.0//en"
"http://struts.apache.org/dtds/struts-2.0.dtd">
其中设置了struts 2框架常量struts.objectfactory的值为spring,实际上,spring是org.apache.struts2.spring.strutsspringobjectfactory类的缩写,默认情况下所有由struts 2框架创建的对象都是由objectfactory实例化的,objectfactory提供了与其他ioc容器如spring、pico等集成的方法。覆盖这个objectfactory的类必须继承objectfactory类或者它的任何子类,并且要带有一个不带参数的构造方法。在这里用org.apache.struts2.spring.strutsspring objectfactory代替了默认的objectfactory。
如果action不是使用spring objectfactory创建的话,插件提供了两个拦截器来自动装配action,默认情况下框架使用的自动装配策略是name,也就是说框架会去spring中寻找与action属性名字相同的bean,可选的装配策略还有:type、auto、constructor,开发者可以通过常量struts.objectfactory.spring.autowire来进行设置。
struts 2框架整合spring后,处理用户请求的action并不是struts框架创建的,而是由spring插件创建的。创建实例时,不是利用配置action时指定的class属性值,根据bean的配置id属性,从spring容器中获得相应的实例。