spring 默认scope 是单例模式 这样只会创建一个Action对象 每次访问都是同一个Action对象,数据不安全 struts2 是要求 每次次访问 都对应不同的Action scope="prototype" 可以保证 当有请求的时候 都创建一个Action对象 ------------------------------------------------------------------------------------------------------------------ 项目中对一个表的增删该操作是用一个action,这个action有add,update,delete,save这些方法,添加和修改是共用一个页面,当页面得到id时代表进行的修改操作,反之是添加操作。因为在配置spring的bean是忘了写scope="prototype"所以每次添加时都显示最后一次访问过的记录
找了很长时间,原来是spring bean出了问题。 scope="prototype" 会在该类型的对象被请求时创建一个新的action对象。如果没有配置scope=prototype则添加的时候不会新建一个action,他任然会保留上次访问的过记录的信息。webwork的Action不是线程安全的,要求在多线程环境下必须是一个线程对应一个独立的实例,不能使用singleton。所以,我们在Spring配置Webwork Action Bean时,需要加上属性scope=”prototype”或singleton=”false”。
spring片段代码
<!--↓=============ACTION==============↓--> <bean id="userActicon" class="*******.UserAction" scope="prototype"> <property name="userService"> <ref bean="userService"/> </property> </bean> <!--↑=============ACTION==============↑--> singleton模式指的是对某个对象的完全共享,包括代码空间和数据空间,说白了,如果一个类是singleton的,假如这个类有成员变量,那么这个成员变量的值是各个线程共享的(有点类似于static的样子了),当线程A往给变量赋了一个值以后,线程B就能读出这个值。因此,对于前台Action,肯定不能使用singleton的模式,必须是一个线程请求对应一个独立的实例。推而广之,只要是带数据成员变量的类,为了防止多个线程混用数据,就不能使用singleton。对于我们用到的Service、Dao,之所以用了singleton,就是因为他们没有用到数据成员变量,如果谁的Service需要数据成员变量,请设置singleton=false。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<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,兴许还能提升一点点性能。
相关推荐
华为2019秋招笔试Java实现(2)
华为2019秋招笔试Java实现(2) 笔试日期2019年8月14日 第二题(200分) 题目描述 某程序员小A,有一种表格数据需要存储在文件中。表格中的每一行,由若干个字段组成,每个字段可以是整数或字符串(字符串只包含数字、字母以及特殊字符!@#%^&*()",)。小A设计了一种存储格式,采用文本的方式对表格数据进行存储。文本文件中的每一行,代表了表格数据中的一行数据。具体格式描述如下: 1、采用逗号分隔不同的字段(逗号前后无空格); 2、数字直接采用10进制的文本存储; 3、字符串的存储规则如下
sping+struts2中配置Action的bean中scope="prototype"的作用
昨天发了一篇文章《奇妙的paramsPrepareParamsStack——Struts2中ModelDriven问题》其实那也不是原因是根本,那个解决方法还是一样如我前面采用的方法:在每次转向之前把对象清空然后初始化一下。只是昨天是在每次调用方法之前在值注入之前先清空初始化了一下。 发现自己在开发中就如田埂上突然冒出个洞,田埂上的田里的水流入我的田里,可我根本不去查明到
WPS接入DeepSeek,实现AI辅助功能
总的来说,借助 WPS 中宏功能与 DeepSeek 大模型的结合,文档处理、内容创作和数据分析等任务都能更加智能化、自动化。这不仅大幅提升了工作效率,也为办公场景带来了全新的智能化办公体验。
Structs2中的prepare和Spring中的scope="prototype“的功能和作用
Structs2中的Preparable接口 Structs2的A
深入解析MSPM0系列Keil开发中‘ti_msp_dl_config.h‘缺失问题的根源与修复
本文深入解析TI MSPM0系列Keil开发中'ti_msp_dl_config.h'文件缺失问题的根源与修复方法。该错误常见于编译时提示file not found,主要因SysConfig工具未正确生成或工程路径配置错误导致。文章提供了从环境检查、手动生成文件到工程配置调整的系统化解决方案,帮助开发者快速解决这一常见KEIL开发难题。
第23章:代码迁移——用AI将Vue2迁移到Vue3、将JS迁移到TS
> - 用AI自动将Vue2 Options API转为Vue3 Composition API的完整流程 > - 将JavaScript项目批量迁移到TypeScript,自动添加类型推导 > - 处理依赖冲突、破坏性变更和迁移后的验证方法 > - 一个完整的Vue2到Vue3迁移案例(含路由、状态管理) > - 我如何用AI将公司一个10万行代码的老项目从JS升级到TS
struts2 action 配置scope="prototype"问题
最近在修改同事代码时,经常遇到莫名的问题,比如查询结果集中出现上一次请求中的脏数据,我就排查啊,总觉得是代码哪个地方写的不严谨,后来想到了,可能是action对象成单例造成的。看了下spring配置文件,果然,全部没有加 scope="prototype"。加上后,问题顺利解决。 ps:不写scope="prototype",默认就是单例,必然会造成脏读取数据,因为不同的线程抢相同的AC...
2023华为od机试【最小循环子数组】C++
2023华为od机试【最小循环子数组】C++ 给定一个由若干整数组成的数组nums,请检查数组是否是由某个子数组重复循环拼接而成,请输出这个最小的子数组。
struts+spring action应配置为scope="prototype"
<bean id="personAction" scope="prototype"class="quickstart.action.PersonAction"> "personService" /> 在配置文件中,bean默认是单例模式,应用服务器启动后就会立即创建bean,以后就可以重复使用。 这带来一个问题,bean的全局变量被赋值以后,在下一次使用时会把值带过去。
VS2019项目使用CGAL6.1配置教程详细步骤
在VS2019项目中使用CGAL详细步骤
【Windows Server 2019】DNS服务器的配置与管理——DNS正向解析
博文介绍了如何使用正向解析区,包括创建和添加并验证,以及术语 主机记录,别名,邮件交换记录的解释。
Struts2+hibernate+spring 配置文件中scope="prototype"的作用 .
项目中对一个表的增删该操作是用一个action,这个action有add,update,delete,save这些方法,添加和修改是共用一个页面,当页面得到id时代表进行的修改操作,反之是添加操作。因为在配置spring的bean是忘了写scope="prototype"所以每次添加时都显示最后一次访问过的记录 找了很长时间,原来是spring bean出了问题。 scope="prototy
基于R-CNN深度学习的石头剪刀布手势识别系统:数据集、模型和UI界面的完整实现
本项目的目标是开发一个基于R-CNN深度学习模型的手势识别系统,能够识别石头、剪刀、布三种手势,并通过UI界面让用户能够进行交互。数据集准备与标注:收集包含石头剪刀布手势的图像,并对其进行标注。深度学习模型构建与训练:采用R-CNN模型进行手势的识别和定位。UI界面设计:设计一个简洁的界面,用户可以上传手势图像并进行识别。R-CNN(Region Convolutional Neural Networks)是一个典型的目标检测模型。生成候选区域。
scope="prototype"的作用
转自 http://zhou568xiao.iteye.com/blog/192208下面是struts2+hibernate+spring配置文件的一部分,以前都是仿造已经写好的bean的配置。有一次 scope="prototype"忘记写了结果出了问题 项目中对一个表的增删该操作是用一个action,这个action有add,update,delete,save这些方法,添加和修改是共用一个...
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
廖雪峰Python教程[完整版]
廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白
spring 的scope="prototype"
悲剧 惨剧 喜剧,心情极其复杂,搞了一天的问题,spring2.5 hibernate3.2 struts2.1 整合的框架,遇到一个见鬼的问题,就是登陆的时候去访问action ,第一次访问的时候没问题,以后再访问就报错 说找不到指定的action名称,后来 在csdn找到答案原来...
LinePhone3.2.7(android端最新版本) sip客户端
SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/
1548



被折叠的 条评论
为什么被折叠?



