Spring MVC Controller线程问题
2015-07-11 10:08
471 查看
原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本声明。否则将追究法律责任。/article/4231844.html
Spring MVC Controller默认是单例的:
单例的原因有二:
1、为了性能。
2、不需要多例。
1、这个不用废话了,单例不用每次都new,当然快了。
2、不需要实例会让很多人迷惑,因为spring mvc官方也没明确说不可以多例。
我这里说不需要的原因是看开发者怎么用了,如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了。
因此,只要controller中不定义属性,那么单例完全是安全的。下面给个例子说明下:
0 | 0
1 | 0
2 | 0
3 | 0
4 | 0
改为单例的:
0 | 0
1 | 1
2 | 2
3 | 3
4 | 4
从此可见,单例是不安全的,会导致属性重复使用。
最佳实践:
1、不要在controller中定义成员变量。
2、万一必须要定义一个非静态成员变量时候,则通过注解@Scope("prototype"),将其设置为多例模式。
单例情况是两个都是全局变量,所以都会增加,多例情况是index在每个实例都是私有变量,所以index都是0,st我就不用说了,静态变量。
本文出自 “熔 岩” 博客,请务必保留此出处/article/4231844.html
原始出处 、作者信息和本声明。否则将追究法律责任。/article/4231844.html
Spring MVC Controller默认是单例的:
单例的原因有二:
1、为了性能。
2、不需要多例。
1、这个不用废话了,单例不用每次都new,当然快了。
2、不需要实例会让很多人迷惑,因为spring mvc官方也没明确说不可以多例。
我这里说不需要的原因是看开发者怎么用了,如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了。
因此,只要controller中不定义属性,那么单例完全是安全的。下面给个例子说明下:
1 | 0
2 | 0
3 | 0
4 | 0
改为单例的:
0 | 0
1 | 1
2 | 2
3 | 3
4 | 4
从此可见,单例是不安全的,会导致属性重复使用。
最佳实践:
1、不要在controller中定义成员变量。
2、万一必须要定义一个非静态成员变量时候,则通过注解@Scope("prototype"),将其设置为多例模式。
单例情况是两个都是全局变量,所以都会增加,多例情况是index在每个实例都是私有变量,所以index都是0,st我就不用说了,静态变量。
本文出自 “熔 岩” 博客,请务必保留此出处/article/4231844.html
相关文章推荐
- struts工作流程
- Java经典问题:传值与传引用?
- ubuntu下安装jdk
- Java Maven
- Android:复制eclipse下的Android项目,成为一个新项目
- eclipse中项目文件的几种读取图片方法
- java计算时间差
- java Enumeration
- Java并发编程:深入剖析ThreadLocal
- eclipse(myeclipse)插件links方式安装
- myeclipse整合maven
- eclipse中项目文件变更位置后的浏览器读取地址的变化
- Java - 判断元音辅音
- eclipse 启动到loading workbench... 自动关闭
- Java读入int数字利用system.in判别季节小测验
- 从Eclipse迁移到Android Studio
- 关于java多条件查询SQL语句拼接的小技巧
- Struts的工作原理
- JAVA写文件:FileOutputStream
- JAVA的InputStream和OutputStream的理解