spring整合SpringMVC Controller 和 Struts2 Action控制层Bean的默认作用域

  • Post author:
  • Post category:其他


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

package


com.pyc.test.controller;

import


org.springframework.context.annotation.Scope;

import


org.springframework.stereotype.Controller;

import


org.springframework.web.bind.annotation.RequestMapping;

import


org.springframework.web.bind.annotation.ResponseBody;

/**



* 创建时间:2015-2-1 下午9:40:03



*



* @author andy



* @version 2.2



*



*/

@Controller

@RequestMapping


(


"/my"


)

public


class


TestController {




private


static


Integer num_s =


0


;



private


Integer num_n =


0


;



@RequestMapping


(


"/count"


)



public


@ResponseBody



Integer show() {




System.out.println(


"num_s:"


+ (num_s++) +


"   num_n:"


+ (num_n++));



return


1


;



}

}




多次请求之后:

\

可以看出变量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是类级别的,参数可以是成员变量,不存在线程安全问题。