java - Guice:如何在没有注入(inject)器或使用构造函数注入(inject)的情况下获取单例实例

标签 java dependency-injection guice

我有一个单例类定义为:

@Singleton
class MySingletonClass{
   ....
}

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

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

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

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

非常感谢。

最佳答案

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

构造函数注入(inject)是最理想的注入(inject)方法之一,因为它使依赖关系显式化,并防止创建具有不满足依赖关系的 MyClass。 如果您确实不喜欢构造函数注入(inject),则始终可以使用 setter 注入(inject),您可以手动注入(inject) MySingletonClass 的实例。

关于java - Guice:如何在没有注入(inject)器或使用构造函数注入(inject)的情况下获取单例实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17493143/

相关文章:

dependency-injection - Angular 2 @Injectable() - 它是如何工作的

google-app-engine - 在 Java GAE 后端 Servlet 中使用 Guice 注入(inject)

java - Java 中的掷骰子模拟

java - 如何禁用 Week DatePicker 的当前日期和先前日期

java - Volley json缓存问题

java - 与客户端 PC 上的 MS Office 通信

java - 我可以使用 Guice 在方法中获取实例吗?

java - 我可以将 SessionBean 注入(inject) Java EE AroundInvoke-Interceptor 吗?

java - 从 Guice 迁移到 Spring : beans with default constructor and properties handling

java - Guice Provider<EntityManager> 与 EntityManager