Guice @Singleton 必须遵循 Singleton 设计模式吗?

Do Guice @Singleton have to follow the Singleton design pattern?

class是否用 @Singleton have to follow the Singleton design pattern 注释了?

我的猜测是他们没有:没有必要有私有构造函数和 static .instance() 方法,而是 Guice 确保 [=17= 的只有一个实例] 将被实例化。

他们不仅不需要遵循单例模式,而且明确地不应该遵循它

使用 Guice 正确设置的系统应该尽可能少地创建自己的对象,而不是让框架完成所有对象的创建。此外,您希望系统中的随机classes在这个静态实例上调用.instance(),并且,最后,您不希望 Guice 使用 .requestStaticInjection().

在 Singleton class 中创建静态引用

@Singleton classes 的正确处理是将它们注入到需要特定依赖项的 classes 中。

Guice 中的单例与常规单例的区别与上下文有关。

当你不使用 Guice 时,你必须自己管理你的单例。为确保只创建一个实例,您有一个私有构造函数、一个静态字段和访问该实例的方法(getter 或使该字段成为最终字段)。这意味着该实例在 class 加载程序 的上下文中是一个单例 。如果你创建另一个 class 加载器并告诉它加载你的单例 class 你可以创建第二个实例。

当单例由 Guice 管理时,我们用 @Singleton 注释替换私有构造函数和静态字段,告诉注入器它应该只创建 one 实例这个 class 并在任何需要的地方使用它。由于可能同时拥有多个注入器(要么因为您需要两个完全不同的上下文,要么因为您使用的是子注入器),因此您不得阻止 Guice 实例化多个实例你的 class.

此外,由于您应该依靠 Guice 在任何需要的地方提供单例,因此不需要包含单例实例的静态字段,因为它永远不会被访问。