答案是单例,为了验证这一点举一个简单的例子。
package com.example.yxjc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
private int count;
@ResponseBody
@GetMapping("/home")
public String welcome(){
count = count +1;
return "hello: " + count;
}
}
演示效果
如果是单例的那么会存在线程安全的问题,可以通过以下几种方法解决
1. 尽量不要在controller中使用变量。
2. 如果非要使用请使用ThreadLocal,为每个线程创建一个变量的副本。
3. 使用@Scope("prototype")注解将controller变为多例模式。
显然第3种不太合适高并发的情况,如果非要使用变量请使用ThreadLocal类修饰。