SpringBoot中默认单例注⼊带来的问题,以及进⾏多例注⼊的
解决⽅案:
1.问题出现的场景:
在做电商系统中,审核优惠券的业务流程时,创建了CouponChecker类。如下:
如上图所⽰,在Spring中,如果⼀个类中需要注⼊⼀个被IOC容器管理的组件(CouponRepository,UserConponRepository),那么当前类(CouponChecker)也需要被IOC容器所管理。
在OrderChecker类中会有如下逻辑:
new CouponChecker(coupon, userCoupon); --> 出现的问题:在Spring中,组件默认是以单例模式注⼊的,所以就意味着,如果⼀个类被IOC容器所管理,默认情况下,在整个Application中,⼀个类只能实例化⼀个对象。所以,当前这个CouponChecker类默认只能实例化⼀个对象。那么它其中的成员属性---> coupon , userCoupon, 内部的数据是共享的。这时,如果在同⼀时刻有多个⽤户下单,但是coupon , userCoupon 只能在同⼀时刻保存⼀个⽤户的coupon数据。这时就会出现问题。
我们需要的是:每⼀个⽤户都应该有⼀个属于⾃⼰独⾃的CouponChecker对象, 并且这么写代码,逻辑本⾝就是不对的。因为CouponChecker类已经被IOC容器管理了,所以我们如果需要使⽤CouponChecker对象,那么就需要从IOC容器中获取,⽽不是⾃⼰⼿动去 new 。
基于这种情况,我们可以利⽤SpringBoot中⾃带的 @Scope("prototype") 注解来实现SpringBoot中的多例注⼊
举例如下:
springboot推荐算法⽤⼀次test(),就可以获取到⼀个新的实例对象。如下图所⽰。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论