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



如果我们在同一个类的同一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"在这个链接中提供的答案更微妙、更容易理解。

此外,这里的博客提供了一个完美的例子,它得到了春季官方文档的支持,以便更好地详细了解。

希望这些建议能有所帮助。谢谢

相关内容

最新更新