【发布时间】:2017-11-28 01:20:14
【问题描述】:
我知道 Spring 可以创建单例 bean。这是否意味着我们不需要自己使用“单例模式”来创建 java bean?那么spring单例模式和单例模式有什么区别呢?
【问题讨论】:
我知道 Spring 可以创建单例 bean。这是否意味着我们不需要自己使用“单例模式”来创建 java bean?那么spring单例模式和单例模式有什么区别呢?
【问题讨论】:
Spring 单例是唯一的 ApplicationContext(每个 Spring 容器)实例。这意味着如果你创建一个新的ApplicationContext,那么即使它是单例的,你也会得到一个新的 bean 实例。
然而,原始 Java 单例意味着每个 Classloader 一个实例。这意味着对于特定的类加载器,单例实例保持不变。在大多数情况下这很好,但是假设如果您需要一个真正的单例,每个 JVM 的单个实例,那么还有一些额外的工作要做。看这个例子https://stackoverflow.com/a/47445573/5343269
您的问题的答案是,如果您在应用程序中实例化单个弹簧容器,那么弹簧单例 bean 可以被视为单例,但这只适用于 Spring 组件。这意味着任何非 Spring bean 的类都无法访问此实例。
为了安全起见,不要依赖 spring 单例并创建自己的单例类。
【讨论】: