Java & Guice - 如何处理继承和抽象?

ary*_*axt 5 inheritance dependency-injection guice

在下面的代码中是否需要用“Inject”注释我的基类的构造函数?如果基类是抽象类怎么办?

使用 DI 时是否需要在构造函数中调用 super?

public class Base {

   @Inject
   public Base(IConfig config) {
      // Do stuff
   }
}

public class A extends Base {

   @Inject
   public A(IConfig config) {
      super(config);
   }
}
Run Code Online (Sandbox Code Playgroud)

Lau*_*ire 5

取决于你想绑定什么。如果绑定BaseA( bind(Base.class).to(A.class)),那么是的,需要第二个构造函数和 @Inject,但不需要 Base 上的构造函数和 @Inject。如果您还计划构建Base,则需要@Inject.

关于对 的调用super(),如果您只有一个带有 IConfig 的构造函数,则 Java 需要它(这与 Guice 无关)。但如果您不需要注入,则没有什么可以阻止您将其IConfig删除Base