Java & Guice - Как бороться с наследованием и абстракцией? - PullRequest
4 голосов
/ 26 февраля 2012

В следующем коде требуется аннотировать конструктор моего базового класса с помощью «Inject»? Что, если базовый класс является абстрактным классом?

Обязательно ли вызывать super в моем конструкторе при использовании DI?

public class Base {

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

public class A extends Base {

   @Inject
   public A(IConfig config) {
      super(config);
   }
}

1 Ответ

4 голосов
/ 26 февраля 2012

Зависит от того, что вы хотите связать. Если вы связываете Base с A (bind(Base.class).to(A.class)), то да, нужен второй конструктор и @Inject, но нет необходимости в базовом конструкторе. Если вы планируете также построить Base, вам понадобится @Inject.

Что касается вызова super(), он нужен Java (это не имеет никакого отношения к Guice), если у вас есть только один конструктор с IConfig. Но ничто не мешает вам удалить его, если вам не нужно вводить IConfig в Base.

...