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,通過讀取配置文件為成員變量初始化.


原文:https://blog.csdn.net/weiha666/article/details/78670644


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM