spring整合SpringMVC Controller 和 Struts2 Action控制层Bean的默认作用域
Spring在整合SpringMVC 时的Controller作用域默认是单例。
Spring在整合Strut2时Action是作用域原型。
我们知道Spring在配置bean时默认是单例。那么对于的service和dao层的bean也是使用的单例模型。
我们做个测试
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使用的同一个成员变量,所以说明默认是单例。
当我们添加如下代码时,添加@Scope改变为原型模式:
@Controller @Scope("prototype") @RequestMapping("/my")
可以看到非静态成员变量始终是新的。
SpringMVC的Controller数据都是从方法参数传入的,是方法级的,使用单例模式,所以在没有共享成员变量情况下是线程安全的,应该避免共享的成员变量防止出现线程安全问题,
而Spring管理的Struts2的Action是原型模式,Action是类级别的,参数可以是成员变量,不存在线程安全问题。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。