Spring MVC的Controller是线程安全的么

如题所述

SpringMVC 是基于单例模式的,所以如果有类的实例全局变量,这个会出现问题。但是根据SpringMVC的设计要求,不推荐存在全局变量,出现的类引用也不过是Service层中的对象,这个对象不具备保存请求数据信息的功能,如果有保存信息也直接传入了函数内部。函数内部定义的变量时线程安全的。所以应该是可以放心使用的。SpringMVC和Sturts2设计的不同是请求的信息是否保存才Controller层中。Struts2的Action是需要保存请求信息的。而SpringMVC是不保存的。所以Struts2是用prototype,SpringMVC是singleton。

整体来说,SpringMVC的Controller是线程不安全的,但是对设计有规定要求,这样可以避免线程安全问题。不只是Controller,包括Service和Dao都是不安全的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-02-04
如果是方法的话,能不能调用还真不知道,没有尝试过。 如果是控制器,可以肯定是不能直接调用的,只能跳转。 如果你需要掉的是方法,请抽离出来,不要放在Controller里面,因为这不符合MVC设计的理念。 如果可以,不是线程安全的。
第2个回答  2018-07-29
参考如下内容:
Spring MVC的Controller用的是Servlet的思想,单例性能好,但线程不安全,如果用其它的Scope,性能会下降。
建议用默认单例方式,实现要共享对象属性,可以用ThreadLocal保护。
controller默认是单例的,不要使用非静态的成员变量(service无所谓,因为它不会变),否则会发生数据逻辑混乱。比如a线程将int i=3,b线程将 i = 4,然后a再访问 i 时, i的值为4本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网