为了账号安全,请及时绑定邮箱和手机立即绑定

为什么spring 默认bean中scope 是单例模式每次访问是同一个Action对象,数据不安全可以的话请详细说明一下

为什么spring 默认bean中scope 是单例模式每次访问是同一个Action对象,数据不安全可以的话请详细说明一下

循着那道光前行 2018-02-28 10:58:27
查看完整描述

3 回答

已采纳
?
慕圣0830664

TA贡献41条经验 获得超26个赞

这个问题很好理解,如果struts2中的action设置成单例的话,那么访问该action中的任意方法时,都是访问同一个action(因为action中可能包含多个方法,而action只有一个),这就会导致脏数据的产生。因为struts2接收参数的方式一般是通过在action中定义成员变量或JavaBean来实现的,也就是说多次请求都会共用这些成员变量,这些成员变量可能会仍然保存着上一次请求所接受到的参数值。当你执行某些操作时,可能会使用到这些成员变量,这样一来,就会导致程序运行的结果跟预期的结果不一致。

查看完整回答
反对 回复 2018-02-28
?
元气满满GO

TA贡献92条经验 获得超16个赞

尽量不要在bean里操作成员变量

查看完整回答
反对 回复 2018-02-28
?
Caballarii

TA贡献1123条经验 获得超629个赞

所以别在单例的类里写成员变量保存数据,要么像struts2就把action的scope设成prototype

查看完整回答
反对 回复 2018-02-28
  • 循着那道光前行
    循着那道光前行
    嗯,但关键是想问为什么scope=singleton是不安全的
  • Caballarii
    Caballarii
    如果类的对象是单例的,用户A调用对象的方法,把属性保存在对象的成员属性里,比如userId,这时同时有个用户B调用同一个方法,把属性也往这个成员变量里保存,就把A保存的覆盖了,A再去取的时候就有可能取到B存的东西。所以单例对象里不要保存成员变量。方法是安全的,不会互相串
  • 3 回答
  • 0 关注
  • 2203 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信