Spring MVC Controller默认是单例的,为了提高性能(这个不用废话了,单例不用每次都new,当然快了。)如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了。因此,只要controller中不定义属性,那么单例完全是安全的。下面给个例子说明下:
public class MultViewController {
private static int st = 0; //静态的
private int index = 0; //非静态
("/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技术。详情,请看下篇博客。