一个关于java对象的内存指向的问题菜鸟问题

java的spring框架,在controller中private一个object对象,用来返回json数据的。这个controller下的多个mapping方法。都会new一个新的对象指向。但是调用这个controller时候,有时候会出现数据错误。但是断点跟踪时候,bean层的数据是准确的。当每个mapping方法不用开始的private的对象直接 object json=new objcet ,数据错误好像正常了,但是自己写一个小demo测试发现数据也没有问题。请大神费点笔墨指点下到底传说中底层的对象的内存指向是同一个多人请求时候出现数据重复覆盖吗?图片说明

2个回答

1、首先你要明白在spring里面,框架是推崇单例模式的。这意味你的controller在程序运行时只有这一个对象
2、spring会针对每个请求创建一个线程,但是公用的还是这个controller对象
3、你的private static是一个私有的静态对象,多个请求使用一个controller对象,意味着多个请求都在使用同一个引用,是的同一个引用。这样你应该
能想明白为什么数据有时候会串。而直接在方法内部“object json=new objcet”的時候就ok了

qq379854836
Vanquishing 回复zhen_1023: 不用。多探讨多交流多进步嘛
接近 3 年之前 回复
qq_34166594
易燃易爆闻一多 回复Vanquishing: 谢谢,受教了 。真心跪谢。已采纳
接近 3 年之前 回复
qq379854836
Vanquishing 回复zhen_1023: 这里你混淆了两个概念,引用和对象。引用指向对象。你的controller里只有一个引用,但是安装你的理解却想要这一个引用同时指向多个对象,你绝对可能吗?顺着一想你也应该能猜到引用肯定是指向最后一个赋值的对象的。所以你前面的那些ajj= new xxx()都是失效了。之后你通过ajj调用的任何方法,都是针对最后一次指向的对象而言的
接近 3 年之前 回复
qq_34166594
易燃易爆闻一多 谢谢,恍然大悟,但是我还是有一点不解,虽然我的对象是controller的局部私有静态对象,但是我在每个method中给它new了一个新的对象。这样多个请求还是原来的同一个引用吗?
接近 3 年之前 回复

首先使用springMVC的controller,表示这个Controller是单例的。在controller中创建了局部变量,则会出现变量被覆盖的错误。
也就是,methodA修改了变量C,methodB也修改了变量C,然后methodA读取的变量C已经被methodB修改了,出现数据非期望值。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问