如果我们在同一个类的同一xml中创建一个具有不同id的新的另一个bean,spring是否会生成另一个singleton bean(在同一ApplicationContext中)?根据我的理解,在单个ApplicationContext中应该只有一个bean实例。
以下示例-
<bean id="bean1" class="com.myCompany.myPackage.MyClass" scope="singleton" />
<bean id="bean2" class="com.myCompany.myPackage.MyClass" scope="singleton" />
简而言之:不,singleton只说您将有:"一个共享实例,它将由具有给定id的getBean的所有调用返回;(这是文档中的说明)。
因此,您可以对应用程序上下文进行任意数量的调用,并获得";bean1";你总是会得到相同的实例,但如果你调用";bean2";id,你会得到另一个实例。
";"singleton";说你只有一个对象。现在,在非Spring应用程序中,通常每个JVM都有它。但在spring应用程序中,让框架来管理这一点。所以通常你只想定义一个类,比如";MyClass";具有作用域singleton。
当依赖关系管理容器(本例中为Spring)管理singleton时,它比"常规"singleton有很多优势。仅举几个例子:
- 更容易测试
- 您总是知道对象是何时创建的,以及何时成为垃圾收集器的对象
- 没有静态代码(Spring驱动的singleton只是一个没有静态的常规bean)
但总的来说,这与你的问题没有直接关系。
我确实在Spring的singleton与Java的singleton的不同上下文中遇到了同样的问题,我发现"Dexter"在这个链接中提供的答案更微妙、更容易理解。
此外,这里的博客提供了一个完美的例子,它得到了春季官方文档的支持,以便更好地详细了解。
希望这些建议能有所帮助。谢谢