【发布时间】:2013-07-05 16:17:20
【问题描述】:
我有一个单例类定义为:
@Singleton
class MySingletonClass{
....
}
我有另一个类使用这个单例类,但是这个类必须使用 new 运算符创建。因此我不能使用构造函数注入或设置器注入等。
class MyClass {
public void method() {
// Uses instnace of MySingletonClass
}
}
我当然可以将 this 的一个实例传递给 MyClass 的构造函数,但从我的程序上下文来看,它并不是一个很好的设计。
另一个解决方案是为 MySingletonClass 创建一个静态 getInstance 方法,以便我可以从程序中的任何位置获取实例。但我想知道Guice是否支持类似的东西?我确信 Guice 可以允许在任何地方获取单例实例。
非常感谢。
【问题讨论】:
-
我确信 Guice 可以允许在任何地方获取单例实例。 Guice 是一个 DI 容器,因此它允许魔法发生,但仅限于容器内部,而这个容器是 @ 987654323@ 实例。您必须隐式(从容器内部,例如通过构造函数注入)或显式(
getInstance()方法)访问它。因此,您必须将您的类置于 DI 控制之下或手动传递您的依赖项。第一个解决方案显然更好。 -
感谢您的回复。注入器实例应该在应用程序的最顶层(例如 main 方法)中全局创建一次。但是有没有什么方法可以在应用程序的任何地方获取 Injector 实例,而无需将在 main 方法中创建的实例显式传递给所有类?
-
不,没有。
Injector毕竟是一个简单的对象。顺便说一句,可以有多个注入器,它们可以形成层次结构。那么,哪一个应该在整个程序中可用?获得Injector实例而不显式传递它的唯一方法是将其注入其中一个托管类。
标签: java dependency-injection guice