单例模式应用场景_Spring单例模式场景下,导致的诡异问题

首先更正一下,问题出现的原因不是spring单例模式有问题,而是对单例模式使用不当。下面我们来看看遇到了什么问题。

今天业务功能代码提测,测试反馈有一个下拉框的列表出现诡异的情况,一会正序一会倒序,接到bug后,赶紧打开代码,简化后代码如下:

controller

6e364413d0cf4127687fd6fa9a033f93.png

配置

d7660e8a4f298835245a5785c9da7f0e.png

application.yml

5de9976751b6d40410b892c1eb4275c0.png

本地请求了2次,发现结果确实不一样

第一次请求

74352dcc304c080314252e9492a9d1a1.png

第二次请求

c29921c7a241c0fbfa9a31bbdbdbdd1d.png

结果确实不一样,本次需求改变的是对原来的配置菜单进行倒序排序,为了方便,并没有对application.yml的配置文件进行修改,直接再代码层面添加了Collections.reverse(menus);方法

b018f4a37c3cc0fbe6e235c6e92e1518.png

分析

Collections.reverse(menus)方法本身并没有什么问题,但由于反转的是List

f5943c921115d765fa637005b70b0c20.png

因此每次请求都会执行一次反转,从而单例的值被反转,下次取得是反转后得值,再一次执行反转,必然导致请求结果不一样。

解决

既然知道问题了,那么解决问题得方法就很多了。

方法一:修改配置文件顺序

方法二:单例类中添加初始化方法

928741451932e8d31865679faade7e42.png

方法三:配置文件添加排序值,进行排序

等待

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值