【问题标题】:Using Java Singleton class in Spring as prototype在 Spring 中使用 Java Singleton 类作为原型
【发布时间】:2018-01-03 05:28:14
【问题描述】:

我有一个纯 Java Singleton 类。

public class MySingleton {

    Private static instance  = new MySingleton();

    private MySingleton(){}

    public static getInstance(){
       return instance;
    }

现在,如果我在原型范围内将这个单例类用作 Spring 中的 bean,Spring 会创建这个纯单例类的多个实例吗?

<bean id="supposedToBeSingleton" class="MySingleton" scope="prototype" />

【问题讨论】:

  • 试一试,看看会发生什么。我敢打赌一个例外,因为 Spring 无法访问构造函数(除非它使它可以访问,这看起来很笨拙和愚蠢)。
  • 我确信 Spring 可以使用反射访问私有构造函数。但问题是它现在会为每个调用创建多个实例吗?
  • 任何人可以使用反射访问私有构造函数,问题是是否当它可能导致这种不一致时,Spring会这样做。当然,在这种情况下你不能真正责怪 Spring,但仍然如此。为什么不试试看呢?
  • 或者有什么东西阻止你尝试它?你说你有那个代码,那么看看它是怎么回事而不是在这里问不是更容易吗?还是你不知道怎么测试?
  • 你手头有代码,运行它,获得自我启蒙。

标签: java spring singleton


【解决方案1】:

您对 spring 的定义不正确,这就是它带来错误的原因,您应该这样定义 其中 YourClassName 代表您的班级(父级或子级)

【讨论】:

    【解决方案2】:

    逻辑上Spring不会使用

             public static getInstance(){
               return instance;
             }
    

    返回单例,因此它将使用默认构造函数返回原型。但要确保您可以运行测试。

    【讨论】:

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