2

我有一个单例类定义为:

@Singleton
class MySingletonClass{
   ....
}

我有另一个使用这个单例类的类,但是这个类必须使用 new 运算符创建。因此我不能使用构造函数注入或设置器注入等。

class MyClass {
   public void method() {
       // Uses instnace of MySingletonClass
   }
}

我当然可以将它的一个实例传递给 MyClass 的构造函数,但从我的程序上下文来看,它并不是一个很好的设计。

另一种解决方案是为 MySingletonClass 创建一个静态 getInstance 方法,以便我可以从程序中的任何位置获取实例。但我想知道Guice是否支持类似的东西?我确信 Guice 可以允许在任何地方获取单例实例。

非常感谢。

4

1 回答 1

4

我认为如果myClass需要MySingletonClass,这意味着它们之间存在明显的依赖关系,因此正确的解决方案是将MySingletonClass的实例传递给MyClass的构造函数。

构造函数注入是最理想的注入方法之一,因为它使依赖项显式化并防止创建具有不满足依赖项的 MyClass。如果你真的不喜欢构造函数注入,你总是可以使用 setter 注入,你可以手动注入 MySingletonClass 的实例。

于 2013-07-05T18:16:03.553 回答