首先更正一下,问题出现的原因不是spring单例模式有问题,而是对单例模式使用不当。下面我们来看看遇到了什么问题。
今天业务功能代码提测,测试反馈有一个下拉框的列表出现诡异的情况,一会正序一会倒序,接到bug后,赶紧打开代码,简化后代码如下:
controller
配置
application.yml
本地请求了2次,发现结果确实不一样
第一次请求
第二次请求
结果确实不一样,本次需求改变的是对原来的配置菜单进行倒序排序,为了方便,并没有对application.yml的配置文件进行修改,直接再代码层面添加了Collections.reverse(menus);方法
分析
Collections.reverse(menus)方法本身并没有什么问题,但由于反转的是List
因此每次请求都会执行一次反转,从而单例的值被反转,下次取得是反转后得值,再一次执行反转,必然导致请求结果不一样。
解决
既然知道问题了,那么解决问题得方法就很多了。
方法一:修改配置文件顺序
方法二:单例类中添加初始化方法
方法三:配置文件添加排序值,进行排序
等待