Spring单例和Java singeleton(设计模式)有什么区别?

Hos*_*ein 22 java singleton spring dependency-injection

我正在学习Spring框架,目前正在阅读一本关于它的书.在本书中,它说Spring单例与Java单例不同?这意味着什么,有什么区别?谢谢

Edw*_*rzo 27

Java单例由Java类加载器限定,Spring单例由容器上下文限定.

这基本上意味着,在Java中,您可以确定单例只是在加载它的类加载器的上下文中才是真正的单例.其他类加载器应该能够创建它的另一个实例(假设类加载器不在同一个类加载器层次结构中),尽管你在代码中努力阻止它.

在Spring中,如果你可以在两个不同的上下文中加载你的单例类,那么我们可以再次打破单例概念.

因此,总而言之,如果Java不能在给定的类加载器中创建该类的多个实例,则认为某些东西是单例,而如果它不能在给定容器中创建多个类的实例,则Spring会认为它是单例上下文.

  • @Edwin Dalorzo:我看到您使用了“容器/上下文”来解释 spring 单例,这可能会让某些人感到困惑。因为 spring bean 相对于容器来说是单例的,但可能不是上下文(即应用程序)。 (2认同)