SSH框架中在Spring容器配置bean的a…
2015-12-28 12:29
465 查看
spring 默认scope 是单例模式
这样只会创建一个Action对象每次访问都是同一个Action对象,数据不安全struts2 是要求 每次次访问 都对应不同的Actionscope="prototype" 可以保证 当有请求的时候 都创建一个Action对象
在配置文件中,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. 多数情况下应使用prototype2. 若用户不多,且频繁操作(频繁使用action),硬件一般,可以考虑session,兴许还能提升一点点性能。
相关文章推荐
- 关于java中天花板函数Math.ceil()&…
- Java EE。ajax 验证用户名
- Spring 开启Annotation <context:annotation-config> 和 <context:component-scan>诠释及区别
- eclipse中快速打开Genymotion插件
- java 深入技术八(内省)
- 心得:Struts2 表单验证
- JDK安装错误
- java常用排序总结
- SpringMVC中拦截器的使用
- Spring MVC 4.1.5 RESTFUL风格返回JSON数据406错误处理
- 第一章 Java加解密简介
- java包装类的作用
- Spring mvc多图片上传页面代码(采用aceadminui框架)
- The Java Programming Language4th读书笔记-第六章 枚举类型
- Java中的Enum(枚举)的使用与分析
- Genymotion Eclipse插件安装
- Java加密技术篇(四)非对称加密算法RSA
- Java加密技术篇(三)对称加密算法PBE
- Java泛型方法
- Java并发专题 带返回结果的批量任务执行