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

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


答案 1

Java 单例的作用域由 Java 类装入器限定,而 Spring 单例的作用域由容器上下文限定。

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

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

因此,总而言之,如果Java无法在给定的类加载器中创建该类的多个实例,则它将它视为单例,而如果Spring无法在给定的容器/上下文中创建多个类的实例,则它将将其视为单例。


答案 2

Java 单例,根据设计模式,实例化被限制为一个,通常由代码根据 JVM 类装入器进行。维基百科

Spring 单例 bean 可以是你编写的任何普通类,但将其作用域声明为单例意味着 Spring 将只创建一个实例,并向引用声明的 Bean 的所有 bean 提供其引用。应用程序中可能有许多该类的实例,但只会为该 Bean 创建一个实例。您甚至可能有多个同一类的 Bean 都声明为单例。每个 Bean 将只创建该类的一个实例。Spring 3.1 Doc


推荐