Spring controller 和 service的并发以及单多例 - Go语言中文社区

Spring controller 和 service的并发以及单多例


          controller 和service的单例和多例在很多时候其实都有并发问题的影响,但是绝大多数情况,很多人没有在意,只有踩坑了才发现。 

          按照我以前的测试,可以发现,controller层如果不输入@Scope("prototype"),那么默认是单例的,但是controller 里的@Autowired呢?又晕了,干脆自己做了个简单的测试。

controller 层 不加 @Scope("prototype"),红字输出

         

Service 不加 @Scope("prototype"),红字输出

 

 

启动项目,刷新五次

结果可知。 controller 和 service 层 不加@Scope("prototype"),全部默认为单例!也就是说@Autowired也是单例形式。

对controller 和 service 层,都加@Scope("prototype")

        可知,加@Scope("prototype")后,都变为了多例模式。

         我还测试了,controller 加@Scope("prototype"),service 不加@Scope("prototype")

从该结果,也可证明 @Autowired是从容器中单例取出来了对象。只是我们平时使用过程中,一般没有用成员变量累加,或者说一般都是只用了mapper  和 方法内的局部变量是没有问题的,但是在有成员变量的变动情况下,这是很危险的。

 

那么getBean 和refrence是什么结果呢,也可以一起测一下。

将@Autowired改成@Resource其余的不变(service 层不改,现在是controller 加@Scope("prototype"),service 不加@Scope("prototype"))

结果为:

结果可知:@Resource也是默认单例的获取bean

那么getBean呢?

结果可知:@getBean也是默认单例的获取bean(getBean有很多方法,我只是测试了根据名字,这一块我后面会做更详细的测试)

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zxysshgood/article/details/85003544
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 20:51:08
  • 阅读 ( 1028 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢