【问题标题】:Single spring bean with two different ids in same xml(application context)同一xml(应用程序上下文)中具有两个不同ID的单个spring bean
【发布时间】:2016-01-03 05:30:37
【问题描述】:

如果我们在同一个 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" />   

【问题讨论】:

  • 这个link 可能对你有帮助。

标签: spring


【解决方案1】:

为了简短起见:不,单例只说你将拥有:“一个共享实例,所有调用 getBean 都会返回给定 id” (这就是文档所述)。

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

“单例”表示您将只有一个对象。 现在在非 Spring 应用程序中,通常每个 JVM 都有它。 但是在 Spring 应用程序中,让框架来管理它。 所以通常你只想用一个作用域单例定义一个类,比如“MyClass”。

当依赖管理容器(在本例中为 spring)管理单例时,它比“常规”单例有很多优势。仅举几例:

  • 更容易测试
  • 您始终知道对象何时创建以及何时成为垃圾收集器的对象
  • 没有静态代码(spring 驱动的单例只是一个没有静态的普通 bean)

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

希望对你有帮助

【讨论】:

    【解决方案2】:

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

    另外,this blog here 提供了一个完美的例子,得到了 Spring 官方文档的支持,以便更详细地理解。

    希望这些指针对您有所帮助。谢谢。

    【讨论】:

      猜你喜欢
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多