springMVC 谨慎使用成员变量
来源:互联网 发布:粒子群算法 python 编辑:程序博客网 时间:2024/06/05 09:27
1.springMVC默认是单例的
对于同一个Controller,只会生成一个实例来处理所有的请求,因此bean实例只会实例化一次,并被存放在工厂中,以供其他请求使用。
在不定义成员变量的情况下是线程安全的。
单例的优点:
1)每次请求不需要重新new一个对象。
2)垃圾收集和回收时更有效率。
Struts2是类级别的,需要原型实现;
SpringMVC是方法级的,没有共享属性的情况下,线程安全的。
2.使用成员变量在并发情况下的状态
如果设置成员变量,那么在多个请求状态下,该成员变量的值是被共享的;(也就是该成员变量在单例模式下是非线程安全的)
如果只存在读取的操作,则不会有问题。
如果存在写值的操作,则会出现问题,当成员变量值被改变之后,其他请求会请求到修改之后的值。
3.如何正确使用
1.在controller中不使用成员变量;
2.设置controller为多例模式,也就是每请求一次都会创建一个controller的对象。
设置controller为多例,@Scope("prototype")。
这几种做法有好有坏,第一种,需要开发人员拥有较高的编程水平与思想意识,在编码过程中力求避免出现这种BUG,而第二种则是容器自动的对每个请求产生一个实例,由JVM进行垃圾回收,因此做到了线程安全。
使用第一种方式的好处是实例对象只有一个,所有的请求都调用该实例对象,速度和性能上要优于第二种,不好的地方,就是需要程序员自己去控制实例变量的状态保持问题。第二种由于每次请求都创建一个实例,所以会消耗较多的内存空间。
所以在使用spring开发web 时要注意,默认Controller、Dao、Service都是单例的
使用第一种方式的好处是实例对象只有一个,所有的请求都调用该实例对象,速度和性能上要优于第二种,不好的地方,就是需要程序员自己去控制实例变量的状态保持问题。第二种由于每次请求都创建一个实例,所以会消耗较多的内存空间。
所以在使用spring开发web 时要注意,默认Controller、Dao、Service都是单例的
阅读全文
0 0
- springMVC 谨慎使用成员变量
- iOS 开发谨慎使用成员变量
- Asp.net Static变量谨慎使用
- 谨慎使用asp.net中的static变量
- Asp.net Static变量谨慎使用
- 如何使用成员变量
- 使用引用成员变量
- 谨慎使用类变量及正确使用单例模式
- 谨慎使用类变量及正确使用单例模式
- 谨慎使用类变量及正确使用单例模式
- 使用含static变量的函数时需谨慎
- 谨慎在页面生命周期里使用全局静态变量
- (SpringMVC)springmvc不可以用成员变量的map
- Static成员变量的使用
- 使用runtime获取成员变量
- java成员变量的使用
- 成员变量和局部变量的使用
- 实例变量与成员变量的使用
- Activity的生命周期
- springmvc跳转页面的方法
- adb shell 提示:error: device not found 连不上的一个解决方案
- @property用法
- centos7 设置当前运行级别和默认运行级别
- springMVC 谨慎使用成员变量
- JanusGraph本地可连接,外部无法连接
- [绍棠] iphone手机机型判断
- centos7编译openjdk1.7过程及报错解决
- 使用Maven 插件构建docker 镜像和推送仓库
- ros 编译ROS程序前要做的事
- AndroidStudio一直处于Refreshing 'xxx' Gradle Project状态
- xgboost算法原理
- LFS8.0 构建LFS系统MPCconfigure 报错