如何实现@Singleton 注解?

新手上路,请多包涵

可能是重复的问题。但是我需要实现类似的东西

@Singleton
public class Person {
}

这将确保只有一个 Person 对象实例。

一种方法是将构造函数设为私有。但这使得 Singleton 注释变得多余。

我真的不明白我是否真的可以在不将构造函数设为私有的情况下将对象创建限制为单个对象。

这可能吗?

原文由 user1401472 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 687
2 个回答

没有注释可以阻止类被实例化。但是,如果您打算实现依赖注入框架之类的东西,或者只是一个简单的对象工厂,那么您可以使用反射来读取注释并防止该类被多次实例化,但我知道这不是您的答案正在寻找。

实际上,您可以考虑放弃单例模式并转向一些更现代的解决方案,例如适当的 DI 框架,这可以为您提供相同的结果 - 具有更大的灵活性。

原文由 gd1 发布,翻译遵循 CC BY-SA 3.0 许可协议

public class ASingletonClass {

    private static ASingletonClass instance = null;

    private ASingletonClass() {

    }

    public static ASingletonClass getInstance() {
        if (instance == null) {
             instance = new ASingletonClass();
        }

        return instance;
    }
}

这才是正确的单例实现方式。注释不能阻止人们调用公共构造函数。

原文由 Cruncher 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题