spring mvc 线程安全问题
controller默认是单例 需要的数据都从方法参数传递 只要不定义类变量 就安全,与servlet一致
spring mvc : 根据@Scope作用域线程安全(可能安全,可能不安全)
struts2 : action每次请求都会创建一个实例(线程安全)
servlet: 单例模式(线程不安全)
Spring MVC的Controller用的是Servlet的思想,单例性能好,但线程不安全,如果用其它的Scope,性能会下降。
建议用默认单例方式,实现要共享对象属性,可以用ThreadLocal保护。
如下定义就是单例:
@Controller
@RequestMapping("/fui")
public class FuiController extends SpringController {
}
如下定义就是每次创建对象:
@Controller
@Scope("prototype")
@RequestMapping("/fui")
public class FuiController extends SpringController {
}
如下定义就是一个会话创建一个对象:
@Controller
@Scope("session")
@RequestMapping("/fui")
public class FuiController extends SpringController {
}