锁定老帖子 主题:Spring Singleton的陷阱
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-12-25
ahuaxuan 写道 feiing正确,楼主没有明白我的话,呵呵,可能我说得不够明白,全局变量会在实例初始化的时候赋值,private UserInfo user = super.getUserInfo(); 这样写,这个user变量只会被一次赋值(产生这个service对象的时候),不会再变了,并且,user是代表状态的,不能够作为service(singleton)的全局变量的,这在哪里都有说明的呀,所以不是我不明白你在说什么,是你不明白我在说什么,我说
引用 你又把user设置为它的全局变量,而且还这样写:private UserInfo user = super.getUserInfo(); ,大错特错, ,这还不够清楚吗。 一是只会被赋值一次,二是如果多线程修改user会造成数据紊乱(虽然你这里没有修改,但是你这样用会误导组里其他不知道得成员,使他们认为这样用是没有问题得),单例的service里不能放有状态的,这是原则,难道我说得真得不够明白吗???
我明白你的意思,你就是找出了个原因,真正的有一个原则性的东西你违反了,现在应该明白点了吧 这个我从一开始就知道! 那段错误的程序不是我写出来的, 是我贴出来讨论的 气死我了! |
|
返回顶楼 | |
发表时间:2006-12-25
不好意思啊,让写代码的人来看看这篇文章吧,其实我们都是对事不对人的,我个人的想法是让中国软件的水平成为世界一流,需要大家努力,大家不应该程序员相轻,楼主见量啊,努力努力,呵呵
|
|
返回顶楼 | |
发表时间:2006-12-25
Ivan Li 写道 Feiing 写道 Ivan Li 写道 满足上面的三个条件,你有什么高招?你无法要求组内所有的人都很清楚Spring 不知道 java 里面有一种叫 Util 的方法? 写成Util方法,跟放在Base里有什么两样?如果提供了Util方法,写继承类的老哥一样回怎么写 public class SomeServece extends BaseService implements SomeInterFace { private public someMethod() { int userID = this.user.getUserID(); String userName = this.user.getUserName(); //bla bla do something user userID and userNaem } } 问题不是还是存在? public someMethod() { UserInfo user = someUtil.getUserInfo(); int userID = this.user.getUserID(); String userName = this.user.getUserName(); //bla bla do something user userID and userNaem } 不放入成员变量就行了啊,别人都说了无数次了. 不知行否. |
|
返回顶楼 | |
发表时间:2006-12-25
晕死,按了个ctrl+x
|
|
返回顶楼 | |
发表时间:2006-12-25
shaucle 写道 Ivan Li 写道 Feiing 写道 Ivan Li 写道 满足上面的三个条件,你有什么高招?你无法要求组内所有的人都很清楚Spring 不知道 java 里面有一种叫 Util 的方法? 写成Util方法,跟放在Base里有什么两样?如果提供了Util方法,写继承类的老哥一样回怎么写 public class SomeServece extends BaseService implements SomeInterFace { private public someMethod() { int userID = this.user.getUserID(); String userName = this.user.getUserName(); //bla bla do something user userID and userNaem } } 问题不是还是存在? public someMethod() { UserInfo user = someUtil.getUserInfo(); int userID = this.user.getUserID(); String userName = this.user.getUserName(); //bla bla do something user userID and userNaem } 不放入成员变量就行了啊,别人都说了无数次了. 不知行否. 这个是正解,一定不能这么用 |
|
返回顶楼 | |
发表时间:2006-12-25
ahuaxuan 写道 不好意思啊,让写代码的人来看看这篇文章吧,其实我们都是对事不对人的,我个人的想法是让中国软件的水平成为世界一流,需要大家努力,大家不应该程序员相轻,楼主见量啊,努力努力,呵呵
|
|
返回顶楼 | |
发表时间:2006-12-25
友谊第一,呵呵
|
|
返回顶楼 | |
发表时间:2006-12-27
再次无语。。。。。
Service既然是单例了,为什么还要写属性在里面?单例的东西不能写任何表示状态的东西。。。。 直接这样就可以了 public class SomeServece extends BaseService implements SomeInterFace { public someMethod() { int userID = getUserInfo().getUserID(); String userName = getUserInfo().getUserName(); //bla bla do something user userID and userNaem } } |
|
返回顶楼 | |
发表时间:2006-12-27
不好意思,不知道怎么删除自己的帖子。。刚才的回复是废话
|
|
返回顶楼 | |
发表时间:2006-12-28
很有意思的一个帖子嘛 尤其是“老哥改行”这一说 !
|
|
返回顶楼 | |