Java Guice@Inject无法使用多个构造函数进行注入

Java Guice@Inject无法使用多个构造函数进行注入,java,dependency-injection,guice,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

我将以一个例子来概述我所面临的问题

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中,参数构造函数不被调用,并且我想要注入的字段为null。 我不想使用field level@Inject。我想使用构造函数注入。如果不可能,请提供替代解决方案。

这里有两件事:

每个类最多可以有一个@Inject注释构造函数。 在抽象类上用@Inject注释是没有意义的,因为它无论如何都不会被实例化。 您的B和C没有调用args构造函数,因为不指定一个构造函数等同于调用super。当您修复了这个问题,即使用两个参数显式调用supera1、a2时,您会感觉很好,并且它不必与依赖项注入做任何事情。
您使用什么代码来获取实例?正如您所说:当调用C的构造函数时,会调用a的无参数构造函数。那么A1和A2怎么可能被注射呢。Java的规则就是Java的规则。如果您希望在构造C时注入A1和A2,那么将它们作为参数添加到C构造函数中,并调用supera1,A2作为第一条指令。我将使用一个函数,该函数将返回B或C对象,并使用该对象调用抽象函数。我只是在这里给出我的问题的模板视图。具有返回对象B或C的函数的类也对B和C使用构造函数注入。@JBNizet这是唯一的解决方法吗?使用构造函数注入,是的。