struts+spring action应配置为scope="prototype"

truts+spring action应配置为scope="prototype"

<bean id="personAction" scope="prototype" class="quickstart.action.PersonAction">        <constructor-arg ref="personService" /></bean>

在配置文件中,bean默认是单例模式,应用服务器启动后就会立即创建bean,以后就可以重复使用。
这带来一个问题,bean的全局变量被赋值以后,在下一次使用时会把值带过去。也就是说,bean是有状态的。
在web状态下,请求是多线程的,全局变量可能会被不同的线程修改,尤其在并发时会带来意想不到的bug。
而在开发时,访问量很小,不存在并发、多线程的问题,程序员极有可能会忽视这个问题。
所以在配置action bean时,应使用scope="prototype",为每一次request创建一个新的action实例。这符合struts2的要求,struts2为每一个request创建一个新的action实例。当request结束,bean就会被jvm销毁,作为垃圾收回。
当然,也可以设置scope="session",也能避免web中action的并发问题,只为当前用户创建一次bean,直至session消失。在这种情况下,对当前用户而言,bean是有状态的。好处就是少创建bean的实例,有那么一点点性能的提升
应用场景:    1. 多数情况下应使用prototype    2. 若用户不多,且频繁操作(频繁使用action),硬件一般,可以考虑session,兴许还能提升一点点性能。
时间: 2024-10-29 03:25:44

struts+spring action应配置为scope="prototype"的相关文章

SSH(Struts+spring+hibernate)配置

1.spring和struts 1)web.xml 配置spring的ContextLoaderListener(监听器) 配置Struts的StrutsPrepareAndExecuteFilter(过滤器) 2)applicationContext.xml 配置service.dao.bean 配置Struts的每个action为bean,并指明scope="prototype" 3)Struts.xml 配置每个action,并且class=bean的id 2.spring和hi

spring scope=&quot;prototype&quot;, scope=&quot;session&quot;

转自: http://www.cnblogs.com/JemBai/archive/2010/11/10/1873954.html struts+spring action应配置为scope="prototype" <bean id="personAction" scope="prototype" class="quickstart.action.PersonAction"> <constructor-arg

实现Spring管理struts的Action

struts2和spring的整合,关键点在于struts2中的action要纳入spring容器的管理中成为一个bean. 可以在struts2中配置: <struts> <constant name="struts.objectFactory" value="spring" /> </struts> 同时action的配置class='beanID',访问该Action时,会通过class对应值去spring中寻找相同id值的

SSH框架 spring 配置中的: scope=&quot;prototype&quot;

"可以利用容器的scope="prototype"来保证每一个请求有一个单独的Action来处理, 避免struts中Action的线程安全问题." 这句话怎么理解呢? 如果用单例方式会有什么样的结果呢? spring 默认scope 是单例模式. 这样只会创建一个Action对象 每次访问都是同一个Action对象,数据不安全 struts2 是要求 每次次访问 都对应不同的Action scope="prototype" 是设置原型模式,可以

struts2 action 配置scope=&quot;prototype&quot;问题

最近在修改同事代码时,经常遇到莫名的问题,比如查询结果集中出现上一次请求中的脏数据,我就排查啊,总觉得是代码哪个地方写的不严谨,后来想到了,可能是action对象成单例造成的.看了下spring配置文件,果然,全部没有加 scope="prototype".加上后,问题顺利解决. ps:不写scope="prototype",默认就是单例,必然会造成脏读取数据,因为不同的线程抢相同的ACTION实例: prototype的话, 就是多例, spring会为每一个请求

Spring的scope=&quot;prototype&quot;属性

Spring的scope="prototype"属性 可以利用容器的scope="prototype"来保证每一个请求有一个单独的Action来处理, 避免struts中Action的线程安全问题.这句话怎么理解呢如果用单例方式会有什么样的结果呢? spring 默认scope 是单例模式这样只会创建一个Action对象每次访问都是同一个Action对象,数据不安全struts2 是要求 每次次访问 都对应不同的Action scope="prototyp

Spring+mybatis+struts框架整合的配置具体解释

学了非常久的spring+mybatis+struts.一直都是单个的用他们,或者是两两组合用过,今天总算整合到一起了,配置起来有点麻烦.可是配置完一次之后.就轻松多了,那么框架整合配置具体解释例如以下. 1.导入对应的jar包 由于我们建造的是maven的web项目,全部我们在pom.xml中须要导入这些包. pom.xml 具体凝视 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&q

spring Bean 配置中scope 和 lazy-init

Spring Bean配置默认为单实例 Bean默认的是单例的. 如果不想单例需要如下配置:<bean id="user" class="..." singleton="false"/> singleton就是配置这个bean是否是单例的,如果不写,就是默认值true. spring Bean 配置中 scope的作用 1.Bean的作用域可以通过Bean标签的scope属性进行设置,Bean的作用域包括:默认情况下scope=&qu

Spring中的scope配置和@Scope注解

Scope,也称作用域,在 Spring IoC 容器是指其创建的 Bean 对象相对于其他 Bean 对象的请求可见范围.在 Spring IoC 容器中具有以下几种作用域:基本作用域(singleton.prototype),Web 作用域(reqeust.session.globalsession),自定义作用域. 1.Spring 的作用域在装配 Bean 时就必须在配置文件中指明,配置方式如下(以 xml 配置文件为例): <!-- 具体的作用域需要在 scope 属性中定义 -->