Struts2和Spring结合之后的Action的作用范围是单例还是多例

本文预计阅读时间 3 分钟
七墨对Struts2和Spring结合之后的Action的作用范围一直存在问题,为什么上来就用多例,用多例的原因是什么?那什么时候用单例呢?找了一些资料,整理下,得到下文内容。

背景 :

1) Struts2会对每个浏览器,产生一个Action的实例来处理(所以应该为多例)。

2) Spring的IOC容器管理的bean默认是单例的。

1.Struts2的Action用多例的原因

Struts2的Action是多例,并非单例,也就是每次请求产生一个Action的对象。

原因是:Struts2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面。如果Action是单例的话,这些数据在多线程的环境下就会相互影响,例如造成别人填写的数据被你看到了。所以Struts2的Action是多例模式。

如果用多例,就在Spring的配置文件中bean配置的时候设置scope="prototype"即可(默认单例)。

  1. <!-- 注意:action的作用范围一定是多例的,这样才符合Struts2架构 -->
  2. <bean name="userAction" class="cn.it.web.action.UserAction" scope="prototype">
  3.     <property name="userService" ref="userService"></property>
  4. </bean>

2.Struts2的Action用单例的时候

首先从数据安全性的问题上考虑,我们的Action应该保证是多例的,这样才不会出现数据问题。但是如果有的action比如只有admin才能操作,或者某些Action,全站公用一个来提高性能,这样的话,就可以使用单例模式。

如果用单例,就无需再设置scope的值了,默认即可。

 

  • 七墨微信
  • 请留下您宝贵的意见,或者每天来本站的文章页面签到,七墨将不胜感激~~
  • weinxin
  • 七墨分享群
  • 要加群的先看本站第一篇文章,不懂的不要加,谢谢~
  • weinxin
七墨
700多份网站主题源码
Adobe软件最新全家桶(win、mac)

来一发,更加快活

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: