Inheritance 爪哇及;Guice-如何处理继承和抽象?

Inheritance 爪哇及;Guice-如何处理继承和抽象?,inheritance,dependency-injection,guice,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);

在下面的代码中,是否需要用“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);
   }
}

取决于您要绑定的内容。如果将
Base
绑定到
A
bind(Base.class).to(A.class)
),则需要第二个构造函数和@Inject,但不需要在Base上的构造函数。如果您还计划构建
Base
,则需要
@Inject


关于调用
super()
,如果您只有一个带IConfig的构造函数,Java需要它(这与Guice无关)。但是,如果您不需要在
Base

中注入
IConfig
,那么没有什么可以阻止您删除它。您到底为什么要扩展一个具体的可注入类?我个人看到的大多数情况下,人们尝试这样做可以通过其他方式得到更好的解决。例如,如果要更改构造函数参数的提供方式,那么像
@Provides
这样的方法往往工作得更好。如果要覆盖具体的方法,这表明基类没有处理实际的用例,无论如何都需要重新设计。Guice最佳实践wiki警告不要使用
@injectpublic
构造函数(请参阅)