您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
关于spring boot同时请求时出现的对象被覆盖的问题?
对象,容器,的是关于spring boot同时请求时出现的对象被覆盖的问题?
发布时间:2020-12-06加入收藏来源:互联网点击:
问题补充:
开发项目时遇到接口调用方同时有两个请求进来同一个方法,存入plan对象时,数据库报主键冲突,难道springboot自动注入的实体类在不同请求进来时,指向的是同一个对象地址吗,为什么不会自动new一个新的对象呢?
有可能是我加了注解Data、导致的吗
回答于 2019-09-11 08:43:50
回答于 2019-09-11 08:43:50
Spring bean 默认单例啊。
回答于 2019-09-11 08:43:50
问题一
首先spring注入的类实例是有IOC容器创建的,IOC容器创建的是公用对象,是单例对象,一次创建,到处使用。,其次request是多线程的
问题二,为什么不每次reqeust都new对象
先说说IOC的思想了,IOC-Inversion of Control,即“控制反转”, 不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
通过控制反转客户端不需要再主动创建对象,只需要通过IOC,由IOC去创建就可以了,由传统的应用程序创建对象转变为由IOC容器来创建,用于控制创建对象的主体发生了改变,这是控制反转。 应用程序需要的对象信息由IOC容器创建后注入,也就是说依赖于容器来注入,这是依赖注入 表达的是一个东西,只是描述的角度不同。 IOC,从容器的角度出发,容器反向控制应用程序对象的创建;
现在来看为什么不new对象
如果对象的构造器发生了变化,是不是每次都需要改动很多需要该对象的地方,但是如果我们把对象的创建交给 ioc 容器来管理,我们就不用关心对象的创建这些,需要对象的时候,我们只需要去通过ioc容器获取我们需要的对象就可以了。
再来看你截图的代码,plan对象明显是一个作为一个实体类存在的,这样的类对象不应该交给ioc控制,由于ioc的单列特性,导致plan对象只有一个,就造成了你上面的问题。
Data注解
这个Data注解是编译期的一个注解,是在编译阶段自动生成field的getter和setter方法,不会对运行期的内容有影响
回答于 2019-09-11 08:43:50
你指定了bean的主键了吧,要不就是主键生成策略有问题。spring默认单例,不会出现你说的同一个对象,要是你自己定义了static变量就当我没说
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |