论坛首页 Java企业应用论坛

Spring Singleton的陷阱

浏览 27027 次
精华帖 (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里不能放有状态的,这是原则,难道我说得真得不够明白吗???
我明白你的意思,你就是找出了个原因,真正的有一个原则性的东西你违反了,现在应该明白点了吧

这个我从一开始就知道! 
那段错误的程序不是我写出来的,   是我贴出来讨论的   气死我了!
0 请登录后投票
   发表时间:2006-12-25  
不好意思啊,让写代码的人来看看这篇文章吧,其实我们都是对事不对人的,我个人的想法是让中国软件的水平成为世界一流,需要大家努力,大家不应该程序员相轻,楼主见量啊,努力努力,呵呵
0 请登录后投票
   发表时间: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  
 } 

不放入成员变量就行了啊,别人都说了无数次了.

不知行否.
0 请登录后投票
   发表时间:2006-12-25  
晕死,按了个ctrl+x
0 请登录后投票
   发表时间: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  
 } 

不放入成员变量就行了啊,别人都说了无数次了.

不知行否.

这个是正解,一定不能这么用
0 请登录后投票
   发表时间:2006-12-25  
ahuaxuan 写道
不好意思啊,让写代码的人来看看这篇文章吧,其实我们都是对事不对人的,我个人的想法是让中国软件的水平成为世界一流,需要大家努力,大家不应该程序员相轻,楼主见量啊,努力努力,呵呵

0 请登录后投票
   发表时间:2006-12-25  
友谊第一,呵呵
0 请登录后投票
   发表时间: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   
    }   
}  
0 请登录后投票
   发表时间:2006-12-27  
不好意思,不知道怎么删除自己的帖子。。刚才的回复是废话
0 请登录后投票
   发表时间:2006-12-28  
很有意思的一个帖子嘛  尤其是“老哥改行”这一说 !
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics