Spring IoC容器中只会存在一个共享的bean实例,这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例。我想知道设计模式中的Singleton模式与spring中的singleton bean之间有什么区别?
还有个比较傻的问题:用户登录后获得一个session,很多用户对bean进行操作,而bean是单例的,那bean对象中的数据岂不是乱了? :oops:
[b]问题补充:[/b]
一楼的朋友好像没有仔细看问题,答非所问啊。
我查资料说,“singleton bean的作用域可以描述为一个container对应一个bean实例”
在问答里也有朋友提出了跟我相似的疑问[url]http://www.iteye.com/problems/27340[/url]
[b]问题补充:[/b]
补充一楼:spring相对于EJB来说“对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。”
那就是说,在classloader中只有一个singleton bean,说的在准确点就是“singleton bean在初始化后只有一个单例存在于spring container中”?
但是资料上说“Spring的singleton bean概念与“四人帮”(GoF)模式一书中定义的Singleton模式是[b]完全不同[/b]的。经典的GoF Singleton模式中所谓的对象范围是指在每一个ClassLoader中指定class创建的实例有且仅有一个。把Spring的singleton作用域描述成一个container对应一个bean实例最为贴切。亦即,假如在单个Spring容器内定义了某个指定class的bean,那么Spring容器将会创建一个且仅有一个由该bean定义指定的类实例。”
它的意思好像是说,在一个ClassLoader中可能有多个container,而一个container中只能有一个singleton bean,我理解的对吗?哪位能再解释下?
[b]问题补充:[/b]
感谢大家的回答,但是分只能给一个人,我觉得heaven的回答我很满意。