Spring MVC的Controller是线程安全的么
3个回答
展开全部
SpringMVC 是基于单例模式的,所以如果有类的实例全局变量,这个会出现问题。但是根据SpringMVC的设计要求,不推荐存在全局变量,出现的类引用也不过是Service层中的对象,这个对象不具备保存请求数据信息的功能,如果有保存信息也直接传入了函数内部。函数内部定义的变量时线程安全的。所以应该是可以放心使用的。SpringMVC和Sturts2设计的不同是请求的信息是否保存才Controller层中。Struts2的Action是需要保存请求信息的。而SpringMVC是不保存的。所以Struts2是用prototype,SpringMVC是singleton。
整体来说,SpringMVC的Controller是线程不安全的,但是对设计有规定要求,这样可以避免线程安全问题。不只是Controller,包括Service和Dao都是不安全的。
整体来说,SpringMVC的Controller是线程不安全的,但是对设计有规定要求,这样可以避免线程安全问题。不只是Controller,包括Service和Dao都是不安全的。
展开全部
如果是方法的话,能不能调用还真不知道,没有尝试过。 如果是控制器,可以肯定是不能直接调用的,只能跳转。 如果你需要掉的是方法,请抽离出来,不要放在Controller里面,因为这不符合MVC设计的理念。 如果可以,不是线程安全的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
参考如下内容:
Spring MVC的Controller用的是Servlet的思想,单例性能好,但线程不安全,如果用其它的Scope,性能会下降。
建议用默认单例方式,实现要共享对象属性,可以用ThreadLocal保护。
controller默认是单例的,不要使用非静态的成员变量(service无所谓,因为它不会变),否则会发生数据逻辑混乱。比如a线程将int i=3,b线程将 i = 4,然后a再访问 i 时, i的值为4
Spring MVC的Controller用的是Servlet的思想,单例性能好,但线程不安全,如果用其它的Scope,性能会下降。
建议用默认单例方式,实现要共享对象属性,可以用ThreadLocal保护。
controller默认是单例的,不要使用非静态的成员变量(service无所谓,因为它不会变),否则会发生数据逻辑混乱。比如a线程将int i=3,b线程将 i = 4,然后a再访问 i 时, i的值为4
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询