【问题标题】:Spring bean singleton vs singleton pattern [duplicate]Spring bean单例与单例模式[重复]
【发布时间】:2015-12-16 12:36:00
【问题描述】:

在 Java 编程中使用 Spring bean 来控制单例实例而不是使用单例模式创建类是否常见?

【问题讨论】:

  • 是的,除非您另有说明,否则它会为您执行此操作。

标签: java spring


【解决方案1】:

这取决于。如果你需要一个实用类,它没有依赖关系并且只提供一堆公共方法,我认为构建你自己的单例是快速而直接的。

但是如果你想构建一个需要注入其他依赖项的业务类,并且可能你想定义接口以避免类之间的耦合,我认为 Spring(或其他 DI 框架)比 Spring(或其他 DI 框架)更好(更容易)构建你自己的单例。

【讨论】:

    【解决方案2】:

    这些是区别:

    1. JVM 处理单例模式类对象的生命周期,而 Spring 上下文处理 Spring 单例 bean 的生命周期。

    2. 单例模式类对象对于整个 JVM 来说都是单一的,如果您在同一个 JVM 中有多个 SpringContext,您可以拥有它的多个对象。

    【讨论】:

      【解决方案3】:

      这取决于您对单例模式的解释松散程度。

      在我的解释中,Singleton 意味着每个给定上下文只有一个实例。上下文通常是 JVM(实际上是 ClassLoader),因为这是用纯 Java 代码最容易实现的,但没有什么能阻止我将模式映射到不同的上下文,其中之一是 Spring 的 ApplicationContext。

      根据这个定义,有人可能会争辩说“请求”和“会话”范围也包含单例对象,只是范围更窄。

      另请参阅this previous answer of mine,我将在此处详细介绍。

      【讨论】:

        【解决方案4】:

        简单地说,当您使用 spring bean 单例时,每个 spring 容器将有一个实例。 但是,当您自己实现单例模式(在我们的例子中是基于 java 的设计模式)时,每个 java 类加载器都会有一个实例。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多