如何使用Spring来管理Struts中的Action

当指定struts.objectFactory为spring时,struts2框架就会把bean转发给spring来创建,装配,注入。但是bean创建完成之后,还是由struts容器来管理其生命周期。配置方式:

(1)struts.xml中:

xml 代码:

< constant name="struts.objectFactory" value="spring" />

(2)struts.properties中:

java 代码:

struts.objectFactory=spring

通常情况下,这样子就够了,然后在struts的action-mapping配置文件中,如下:

xml 代码:

< action name="user" class="com.myapp.admin.web.action.user.UserAction">

即可,如果在Action中有依赖于其它的BEAN,也会被自动注入进来。这时候,Action实例是以prototype方式创建的,SPRING会为每个请求创建一个ACTION的实例。

在某些时候,你可能希望不仅仅让SPRING创建和装配Action对象,还希望让SPRING完全管理这些对象,如希望使用AOP或者希望使用acegi时。这时候,只需要在spring的配置文件中定义这些action 即可。如在applicationContext.xml文件中:

xml 代码:

< bean id="user" class="com.myapp.web.action.user.UserAction"/>

然后在action-mapping中,指定class="user"即可。

需要注意的一个地方:Spring中的缺省作用域是Singleton作用域。而往往Action属于有状态的bean,应该使用prototype作用域。

< bean id="user" class="com.myapp.web.action.user.UserAction" singleton="false"/>

如果忽略这个细节,在我们方便实用set,get方法处理数据的时候,可能会有线程安全上的风险。

时间: 2024-09-11 23:01:06

如何使用Spring来管理Struts中的Action的相关文章

tomcat5-类加载机制 Tomcat5 shared目录下加载的Spring如何管理Tomcat中部署的多个项目

问题描述 类加载机制 Tomcat5 shared目录下加载的Spring如何管理Tomcat中部署的多个项目 20C 我们知道Tomcat5.x类加载体系结构如下:不同的类加载器加载不同路径上的类或jar包. Bootstrap | System | Common / Catalina Shared / Webapp1 Webapp2有这样一个场景,在Tomcat5.x下部署了10个项目,每个项目都是用Spring来组织和管理的,可以吧Spring放到Tomcat的Common或Shared目

Struts中的Action类的工作机制

Struts中的Action类的工作机制  所有的Action类都是org.apache.struts.action.Action的子类.Action子类应该覆写父类的execute()方法.当ActionForm Bean被创建,并且表单验证顺利通过后,Struts框架就会调用Action类的execute()方法.execute()方法的定义如下:    public ActionForward execute(ActionMapping mapping                   

path-jsp中action 和Struts 中的action虚拟路径问题

问题描述 jsp中action 和Struts 中的action虚拟路径问题 <html:form action=""/clsCompCaseDealAction"" method=""post"" enctype=""multipart/form-data""> 和struts中的 <action attribute=""clsCompCaseDe

Struts2和Spring整合中的Action是由谁创建的,有什么区别

问题描述 以下配置均未在Struts配置文件中加入<constant name="struts.objectFactory" value="spring" />情况说明如下:登录页面提交到Action中,Action在execute方法中调用ms对象中的valid方法进行验证,返回SUCCESS.在Action的构造方法中输出一行文字第一种情况:在Struts中配置Action,配置name,class配置成Spring中Action类的Bean ID,

Spring 事务管理高级应用难点剖析: 第 3 部分

本文是"Spring 事务管理高级应用难点剖析" 系列文章的第 3 部分,作者将继续深入剖析在实际 Spring 事务管理应用中容易遇见的一些难点,包括在使用 Spring JDBC 时如果直接获取 Connection,哪些情况会造成数据连接的泄漏与如何应对,以及除 Spring JDBC 外,其它数据访问技术数据连接泄漏的应对方案.   概述 对于应用开发者来说,数据连接泄漏无疑是一个可怕的梦魇.如果存在数据连接泄漏问题,应用程序将因数据连接资源的耗尽而崩溃,甚至还可能引起数据库的

Spring 事务管理高级应用难点剖析: 第 2 部分

本文是"Spring 事务管理高级应用难点剖析" 系列文章的第 2 部分,作者将继续深入剖析在实际 Spring 事务管理应用中容易遇见的一些难点,包括混合使用多种数据访问技术(如 Spring JDBC + Hibernate)的事务管理问题,以及通过 Spring AOP 增强的 Bean 存在的一些比较特殊的情况. 联合军种作战的混乱 Spring 抽象的 DAO 体系兼容多种数据访问技术,它们各有特色,各有千秋.像 Hibernate 是非常优秀的 ORM 实现方案,但对底层

spring-Spring如何给Struts生成新action对象?

问题描述 Spring如何给Struts生成新action对象? Spring3.2.12 Struts2.3.20 看struts代码: @Component @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON) @ParentPackage("struts-default") @Namespace("/test") public class TestAction { private String flag; @Actio

对于一个项目中的部分实体类不使用spring作为管理容器,也不使用注入方式来调用接口的话,如何手动处理实体类和调用接口?

问题描述 本人初学spring,对spring不甚了解.看到其他人做的web项目设计,说对action实体类不使用spring管理容器,也不使用注入方式来调用接口,手工处理.我想问大家的是,如果这样子的话,代码应该是怎样的方式?以下面这几个文件为例,使用spring管理实体类,并通过注入方式调用接口,现在是可以正常运行的,如果实现他说的这样,代码大致该如何修改呢?请大家详细指点,谢谢!!action类:packagecn.gth.test.view;importcn.gth.test.dao.I

ASPECT中如何获得SPRING所管理的事务.?

问题描述 项目使用spring来管理的业务逻辑的事务,也意识到需要添加缓存.但是现在面临下面两个问题:1.缓存准备用在dao类上面做aop,然而事务做在service上面,所以无法确定同一个事务中的操作调用了哪些dao类,2.也无法在事务提交或者回滚的时候得到通知来操作缓存第一个问题想了好久都没有解决,曾经貌似在那里看到一个TransactionUtils的类吧.但是现在一直都没有找到..第二个问题,感觉可以在PlatformTransaction接口上面做文章,在提交事务的方法上面做一个环绕通