spring的scop问题

spring中有状态的bean的问题

概要:如果一个bean有自己的实例变量,可以在程序运行中保存数据。那么第一个请求结束以后,第二个请求拿到这个bean,此时这个bean里面的实例变量还是第一次的吧?在单例和原型的scop下都是这样的吧?

这样的现象要怎么合理的解决呢?设置为requst的scop吗?

你仔细看看,平时设计成单例bean的对象都是没有状态的。有状态的bean被设置成单例被多个线程同时使用就会出问题了;多个线程同时都往这个bean中设置数据,那么数据就会被覆盖。只有一个最后线程的数据设置成功了,其余线程从bean拿到的数据就是最后一个线程设置的。你说的设置scope就是解决的办法,每一个request请求都会生成一个新的bean;还可以用ThreadLocal,这样也行。

spring的bean的创建默认是单例的,所要创建非单例的bean可设置scope="prototype"

这种你放在方法里不就好了吗

单例那就不清楚了,你多个请求一起润直接gg,天知道谁最后一个修改的
多实例的话那就相当于每次都初始化了,你想要保存上次的相关数据,要么是使用juc的类,要么引入中间件

可以看下我这篇博客 专门讲了spring中bean的原理 https://blog.csdn.net/weixin_44427181/article/details/126949202?spm=1001.2014.3001.5502

你看看这是你需要的答案吗?单例 bean 依赖有状态的 spring bean.

https://blog.csdn.net/u012410733/article/details/125663924