java - 在构造函数中带参数的 DI

标签 java dependency-injection guice

所以我在我的 Java 项目 (Google Guice) 中实现了一个依赖注入(inject)框架,一切都很好,我喜欢它,但有一个小问题; 我想创建一个我的主项目类的 static 实例(它在其中实例化依赖项等)。但是我不知道使用 Guice 实例化它的任何方法,我无法手动实例化它,因为我在它的构造函数中使用 DI(我在构造函数中有对象)这意味着我无法访问实例化类所需的类的非静态变量。 我尝试使用 Provider,但我真的不明白在哪里绑定(bind)它,因为我不想有一个主类的接口(interface)(如果需要的话)。

最佳答案

如果您想将一个类的静态实例与依赖注入(inject)混合使用,那么您有点错过了依赖注入(inject)的要点:您可以简单地注入(inject)该类的实例。

如果你希望你的注入(inject)器有一个类的单个实例,将它绑定(bind)在 @Singleton 范围内:要么:

bind(YourClass.class).in(Singleton.class);

在你模块的 configure() 方法中,或者

@Provides @Singleton YourClass provideYourClassInstance() {
  // ...
}

在你的模块中,或者

@Singleton class YourClass {
  // ...
}

在实际的类声明中。

然后像注入(inject)其他实例一样注入(inject)这个实例:

class SomeOtherClass {
  @Inject SomeOtherClass(YourClass instance) {
    // ... Do something with instance, like assign it to a field.
  }
}

重点是 SomeOtherClass 不需要知道任何关于 instance 的生命周期:它是一个单例实例还是每个类都无关紧要使用它有自己的实例。

关于java - 在构造函数中带参数的 DI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43148058/

相关文章:

java - Quartz CronTrigger - 获取下一个触发时间

Java 简单框架与 Coffeescript

java - 原始变量和引用变量的内存分配

java - 注入(inject)构造函数和伴生对象

java - Java 应用程序中的属性框架

java - "javac: release version 10 not supported"编译期间

java - @Inject 和 @Named 注释给出 NoSuchBeanDefinitionException

c# - 使用带有目标对象信息的 MEF 注入(inject)对象

java - Dagger :注入(inject)一个类的不同实例

gwt - 谷歌 GIN AbstractModule 到 GET.Create()