分享免费的编程资源和教程

网站首页 > 技术教程 正文

Spring单例模式场景下,导致的诡异问题

goqiw 2025-07-06 12:03:24 技术教程 5 ℃ 0 评论

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

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

controller

配置

application.yml

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

第一次请求

第二次请求

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

分析

Collections.reverse(menus)方法本身并没有什么问题,但由于反转的是List<Menu> menus这个对象,在java中对象的赋值,是引用,因此将menus做反转,必然会导致
selectMenuConfig.getMenuList()内容反转。而SelectMenuConfig是单例的,因此必然会修改属性List<Menu> menuList。

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

解决

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

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

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

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

等待

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表