码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-03-03 18:38:06      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:springmvc   struts2   action   controller   

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


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

标签:springmvc   struts2   action   controller   

原文地址:http://blog.csdn.net/fengshizty/article/details/44040627

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!