2010-05-07 51 views
1

阅读本春季单周期

当一个bean是一个独生子,一个 bean的共享实例将 管理,用于与ID豆 或ID匹配豆 定义将所有请求导致返回一个 特定的bean实例。

进行管理......

这是什么意思?

如果只有一个目标,比任何修改这个对象将导致每个另一个

试图让这个bean将返回一个修改后的实例?

回答

3

不是修改的副本,而是对唯一(修改的)实例的引用。不应该复制Singletons

我不认为“托管”应该指的是除了保留“只有一个bean的共享实例”之外的任何特殊处理。

+0

是的,这正是我所说的。因此,如果一个Web应用程序副本将更改此对象,并且另一个Web应用程序实例将尝试获取一个Bean,则第二个Web应用程序将会看到所有的修改? – EugeneP 2010-05-07 11:47:14

+0

“托管”文档意味着“由此ApplicationContext/BeanFactory管理”。所以你可能会在Spring之外创建许多bean的实例,但Spring只会创建一个实例,并且只要在将它连接到其他bean时调用getBean(),就可以返回对该实例的引用。 @EugeneP你是什么意思的“另一个Web应用程序实例”?每个Web应用程序本质上都是一个独立的容器,除非您已经设置了一些特殊的配置,否则您将在一个Web应用程序中有一个Spring bean工厂,而在第二个Web应用程序中有第二个实例。 – 2010-05-07 11:50:54

+1

@EugeneP,正好。限制多线程程序中的可见性问题 - 我不知道Spring是如何(或者是否)处理这些问题的,但我想你必须确保你的单例是线程安全的。 – 2010-05-07 11:52:32