springMVC的controller單例和多例下成員變量的問題

首先上測試代碼

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

import com.sun.accessibility.internal.resources.accessibility;
@Controller
@Scope("prototype")
public class MyController {

    private int i = 0; //非靜態
    private static int a=0;//靜態
    @RequestMapping("/test1")
    public String toShow(ModelMap model) {
        System.out.println((++i)+"-----"+(++a));
        return "hello";
    }    
}

當瀏覽器第一次訪問http://localhost:8080/boot-crm/test1.action

我們來看控制檯和debug輸出信息
注意debug顯示的當前controller的id

這裏寫圖片描述

再次訪問
這裏寫圖片描述
這裏寫圖片描述
從debug提供的信息可以看出多例模式下的controller的id會變化,也就是說2次訪問action,springMVC創建了不同的controller.

當在controller類上去掉@scope(“prototype”),變成默認的單例模式
這裏寫圖片描述

訪問action
這裏寫圖片描述
這裏寫圖片描述

再次訪問
這裏寫圖片描述
這裏寫圖片描述
2次訪問的是同一個controller,共享普通成員變量和靜態成員變量.

總結:
單例模式下會共享普通成員變量和靜態成員變量,多例模式下普通成員變量不共享,靜態成員共享.
在開發中,springMVC優先使用單例模式,而且儘量不要在controller中設定成員變量.
如果要定義成員變量併爲成員變量賦值可以配置source.properties,通過讀取配置文件爲成員變量初始化.
這裏寫圖片描述

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