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有很多方法,我只是测试了根据名字,这一块我后面会做更详细的测试)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章