单个spring bean,在同一个xml中有两个不同的id(应用程序上下文)

时间:2016-01-03 05:30:37

标签: spring

如果我们在同一个xml中为同一个类创建一个具有不同id的新另一个bean,那么Spring会生成另一个单独的bean(在同一个ApplicationContext中)吗? 根据我的理解,单个ApplicationContext中只应该有一个bean实例。

以下示例 -

<bean id="bean1" class="com.myCompany.myPackage.MyClass" scope="singleton" />   
<bean id="bean2" class="com.myCompany.myPackage.MyClass" scope="singleton" />   

2 个答案:

答案 0 :(得分:3)

保持简短:不,单身人士只说你将拥有:“一个共享实例,所有调用getBean都将返回给定的id” (这就是文件说明的内容)。

因此,您可以对应用程序上下文执行任意数量的调用并获取“bean1”,并且您将始终获得相同的实例,但如果您通过“bean2”id调用,则会获得另一个实例。

“单身人士”说你只有一个物体。 现在在非Spring应用程序中,通常每个JVM都有它。 但是在spring应用程序中,让框架管理它。 所以通常你只想定义一个像“MyClass”这样的类,并使用范围单例。

当依赖管理容器(在这种情况下为spring)管理单例时,它比'常规'单例具有很多优点。仅举几例:

  • 更容易测试
  • 您始终知道何时创建对象以及何时将其置于垃圾收集器
  • 没有静态代码(弹簧驱动的单例只是一个没有静态的常规bean)

但总的来说,它与你的问题没有直接关系。

希望这有帮助

答案 1 :(得分:0)

我确实在 Spring 的单例与 Java 的单例的不同上下文中遇到了同样的问题,我发现 this link 中的 'Dexter' 提供的这个答案更加微妙且易于理解。

此外,this blog here 提供了一个完美的示例,由官方 Spring 文档支持,以便更好地理解。

希望这些指针有帮助。谢谢。