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

本文通过实验详细解析了Spring框架中controller和service层的单例(@Singleton)和多例(@Prototype)模式。阐述了@Autowired和@Resource在不同作用域下的行为,并对比了getBean方法的表现。
摘要由CSDN通过智能技术生成

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值