我正在学习Spring框架,目前正在阅读一本关于它的书。 在本书中,它说Spring单例与Java单例不同? 这是什么意思,有什么区别? 感谢
答案 0 :(得分:25)
Java单例由Java类加载器限定,Spring单例由容器上下文限定。
这基本上意味着,在Java中,您可以确保单例只是在加载它的类加载器的上下文中才是真正的单例。其他类加载器应该能够创建它的另一个实例(假设类加载器不在同一个类加载器层次结构中),尽管你在代码中努力阻止它。
在Spring中,如果你可以在两个不同的上下文中加载你的单例类,那么我们可以再次打破单例概念。
因此,总而言之,如果Java不能在给定的类加载器中创建该类的多个实例,则认为某些东西是单例,而如果它不能在一个类中创建多个类的实例,则认为它是单例。给定容器/上下文。
答案 1 :(得分:4)
Java单例,按照设计模式,实例化被限制为一个,通常由代码按 JVM 类加载器。 <子> Wikipedia 子>
Spring单例bean可以是你编写的任何普通类,但是将它的范围声明为singleton意味着Spring只创建一个实例并提供对引用声明bean的所有bean的引用。您的应用程序中可能有该类的许多实例,但只会为该bean 创建一个实例。您甚至可能将同一类的多个bean都声明为singleton。每个bean将只创建一个类的实例。 <子> Spring 3.1 Doc 子>