Guice:如何在没有注入器或使用构造函数注入的情况下获取Singleton的实例

时间:2013-07-05 16:17:21

标签: java dependency-injection guice

我有一个单例类定义为:

@Singleton
class MySingletonClass{
   ....
}

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

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

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

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

非常感谢。

1 个答案:

答案 0 :(得分:4)

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

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