Spring在整合SpringMVC 时的Controller作用域默认是单例。
Spring在整合Strut2时Action是作用域原型。
我们知道Spring在配置bean时默认是单例。那么对于的service和dao层的bean也是使用的单例模型。
我们做个测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
|
多次请求之后:
可以看出变量num_n使用的同一个成员变量,所以说明默认是单例。
<喎�”http://www.2cto.com/kf/ware/vc/” target=”_blank” class=”keylink”>vcD4KPHA+tbHO0sPHzO2808jnz8K0+sLryrGjrMztvNNAU2NvcGW4xLHkzqrUrdDNxKPKvaO6PC9wPgo8cD48YnI+CjwvcD4KPHByZSBjbGFzcz0=”brush:java;”>@Controller @Scope(“prototype”) @RequestMapping(“/my”)
可以看到非静态成员变量始终是新的。
SpringMVC的Controller数据都是从方法参数传入的,是方法级的,使用单例模式,所以在没有共享成员变量情况下是线程安全的,应该避免共享的成员变量防止出现线程安全问题,
而Spring管理的Struts2的Action是原型模式,Action是类级别的,参数可以是成员变量,不存在线程安全问题。