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是類級別的,參數可以是成員變量,不存在線程安全問題。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章