我有一个单例类定义为:
@Singleton
class MySingletonClass{
....
}
我有另一个使用这个单例类的类,但是这个类必须使用new运算符创建。因此我不能使用构造函数注入或setter注入等。
class MyClass {
public void method() {
// Uses instnace of MySingletonClass
}
}
我当然可以将这个实例传递给MyClass的构造函数,但是从我的程序上下文来看它并不是一个很好的设计。
另一个解决方案是为MySingletonClass创建一个静态getInstance方法,以便我可以从程序中的任何位置获取实例。但我想知道Guice是否支持与此类似的任何内容?我相信Guice可以允许在任何地方获得单例实例。
非常感谢。
答案 0 :(得分:4)
我认为如果myClass需要MySingletonClass,这意味着它们之间存在明确的依赖关系,因此正确的解决方案是将MySingletonClass的实例传递给MyClass的构造函数。
构造函数注入是最理想的注入方法之一,因为它使依赖项显式化,并防止创建具有不满足依赖性的MyClass。 如果你真的不喜欢构造函数注入,你总是可以使用setter注入,你可以手动注入MySingletonClass的实例。