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 {
}
本文探讨了Spring MVC中Controller的线程安全问题,详细解释了单例模式下的线程安全考虑,以及如何通过@Scope注解来改变作用域以确保安全性。同时对比了Struts2和Servlet的线程安全特性。
992

被折叠的 条评论
为什么被折叠?



