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这是唯一的解决方法吗?使用构造函数注入,是的。