springmvc controller单实例
2015-08-06 15:58
597 查看
Spring MVC Controller默认是单例的,为了提高性能(这个不用废话了,单例不用每次都new,当然快了。)如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了。因此,只要controller中不定义属性,那么单例完全是安全的。下面给个例子说明下:
0 | 0
1 | 1
2 | 2
3 | 3
4 | 4
在类上添加@Scope("prototype"),改为多实例,输出结果:
0 | 0
1 | 0
2 | 0
3 | 0
4 | 0
那么,接下来的问题来了?在controller中注入service、在service中注入dao,dao中有数据的连接,如果默认使用的是单实例,那么会不会造成线程安全性问题?
答案肯定是不会的。因为spring使用了localthread技术。详情,请看下篇博客。
@Controller public class MultViewController { private static int st = 0; //静态的 private int index = 0; //非静态 @RequestMapping("/test") public String test() { System.out.println(st++ + " | " + index++); return "/lsh/ch5/test"; } }默认单实例下,输出结果:
0 | 0
1 | 1
2 | 2
3 | 3
4 | 4
在类上添加@Scope("prototype"),改为多实例,输出结果:
0 | 0
1 | 0
2 | 0
3 | 0
4 | 0
那么,接下来的问题来了?在controller中注入service、在service中注入dao,dao中有数据的连接,如果默认使用的是单实例,那么会不会造成线程安全性问题?
答案肯定是不会的。因为spring使用了localthread技术。详情,请看下篇博客。
相关文章推荐
- Java实现二叉树的定义和递归实现
- Java中的10颗语法糖
- SVN提交忽略*.class、.classpath、.mymetadata、.project、.settings、.myeclipse和其他非版本控制文件
- 序列化java对象
- MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合
- Java中的Enum的使用与分析
- Java序列化
- java注解annotation,自定义注解--shanchu
- 获取servlet相关的域对象
- java中重载与重写的区别
- Java疑问:-------在Socket中用PrintWriter 写入的数据为什么用DataInputStream不能读取?
- java代码优化
- #笔记#圣思园 JavaWeb 第59讲——使用Firebug调试JS、JSUnit,XUnit
- Java Sleep() 与 Wait()的机制原理与区别
- 【@Transactional】Spring 之注解事务 @Transactional
- 线程安全与并发安全探究(四)-java集合框架
- java代码--汉诺塔
- java Method用法
- spring和java国际化资源文件加载顺序
- WSAD 如何修改JDK以使用jdk1.4