1、springmvc controller默認是單例的
當controller被實例化之后,整個容器中只會有一個實例。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/")
public class AdminController {
private int x = 1;
private static int y = 1;
@RequestMapping("/test")
@ResponseBody
public String test(){
System.out.println("x="+(x++));
System.out.print(" y="+(y++));
return "success";
}
}
運行多次之后,結果如下:
2、將代碼修改,在controller上添加@Scope("prototype")注解之后
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;
@Controller
@Scope("prototype")
@RequestMapping("/")
public class AdminController {
private int x = 1;
private static int y = 1;
@RequestMapping("/test")
@ResponseBody
public String test(){
System.out.print("x="+(x++));
System.out.print(" y="+(y++));
System.out.println();
return "success";
}
}
運行多次之后,結果如下:
prototype在每次調用controller時都會創建一個新的實例,所以x的值一直都是1,而y是靜態變量,靜態變量跟實例是無關的,只跟類有關,是所有對象共有的,所以每運行一次,y的值都會改變