Guice @Inject无法注入多个构造函数

时间:2017-12-14 08:02:02

标签: java dependency-injection guice

我将首先回顾一下我面临的问题。

class abstract A {
   @Inject
   A() {}

   @Inject
   A(A1 a1, A2 a2) {
      this.a1 =a1;
      this.a2 =a2;
   }
   public abstract doSomething();
   A1 a1;
   A2 a2;
}

class B extends A {

   @Inject
   A(A3 a3) {
      this.a3 =a3;
   }
   public doSomething() {
          System.out.println("some work");
   };
   A3 a3;
}
class C extends A {

   @Inject
   A(A4 a4) {
      this.a4 =a4;
   }
   public doSomething() {
          System.out.println("some work");
   };
   A4 a4;
}

B类和C类使用A的默认构造函数扩展A.因此,在类A中,不调用参数构造函数,并且我想要注入的字段为null。 我不想使用字段级@Inject。我想使用构造函数注入。如果不可能,请提供替代解决方案。

1 个答案:

答案 0 :(得分:1)

在这里结识:

  • 每个类最多只能有一个@Inject - 带注释的构造函数。
  • 在抽象类上使用@Inject进行注释并不合理(无论如何都不会实例化)。
  • 您的BC正在调用no-args构造函数,因为未指定一个构造函数等同于调用super()。当你解决这个问题时(即用两个参数明确地调用super(a1, a2)),你就会很好(并且它不需要对依赖注入做任何事情)。 / LI>