Spring MVC的Controller是线程安全的么?

jihaixiao8 2014-09-25 03:08:25
众所周知,Struts2的Action因为每次请求都会创建一个实例,所以不存在线程不安全的问题。。
但是Sprng MVC的Controller我是用的扫描的方式,在servletname-servlet.xml配置的,Spring IOC搞的Bean默认是单例模式吧?
我这么扫描Controller是不是就是单例的,会不会出现跟Servlet一样使用成员变量的线程安全问题????
如果加@Scope("prototype")其实可以解决,工作中大家都是怎么解决的?会不会影响性能??????
...全文
32073 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
czwfybs 2017-03-08
  • 打赏
  • 举报
回复
这个简单,默认是单例的,因为这个Controller是经过SpingMvC的servlet, 众所周知servlet是单例的,它存在线程不安全的因素。,所有自然而然它可以是单例的,Spring的强大之处,个人觉得有一点是它可以使一个对象单例或者多例。,按照需求完全可以把一个或者几个配置为多例的。对性能要求几乎没怎么影响,要是 默认是多例的,可能一个项目中有几千个Controller,这个内存消耗就大了。
易德军 2016-12-13
  • 打赏
  • 举报
回复
请见这里结合多线程环境http://blog.csdn.net/LoveJavaYDJ/article/details/53584396详细分析
2011578707 2015-07-09
  • 打赏
  • 举报
回复
你狂刷浏览器,试试看。默认是单例的。但是线程号有的一样,有的不一样。结果却是线程安全的
2011578707 2015-07-09
  • 打赏
  • 举报
回复
qg1990 2015-07-09
  • 打赏
  • 举报
回复
我不知道楼主试过没有
tom_66 2014-09-25
  • 打赏
  • 举报
回复
你的理解是对的,Spring MVC 和 Servlet 一样,都不是线程安全的, 所以在使用成员变量的时候一定要注意,以免出现意外。 不要使用可变的成员变量,当然可以使用service,因为service基本上都是不可变的,因为service除了各种dao,也没有可变的成员变量。
lsongiu86 2014-09-25
  • 打赏
  • 举报
回复
单例挺好啊,不使用成员变量就好了吧
howsun_zh 2014-09-25
  • 打赏
  • 举报
回复
这个问题经常被问,见回答: http://bbs.csdn.net/topics/390891861#post-398241838
jihaixiao8 2014-09-25
  • 打赏
  • 举报
回复
引用 1 楼 oh_Maxy 的回复:
Struts2是类级别的,需要原型实现; SpringMVC是方法级的,没有共享属性的情况下,线程安全的。
额。。。万一有共享属性的时候该怎么办?在那个Controller上配置@Scope注解么
oh_Maxy 2014-09-25
  • 打赏
  • 举报
回复
关于单不单例,这里有个文章,比较言简意赅:http://lavasoft.blog.51cto.com/62575/1394669
oh_Maxy 2014-09-25
  • 打赏
  • 举报
回复
Struts2是类级别的,需要原型实现; SpringMVC是方法级的,没有共享属性的情况下,线程安全的。

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧