我将首先回顾一下我面临的问题。
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。我想使用构造函数注入。如果不可能,请提供替代解决方案。
答案 0 :(得分:1)
在这里结识:
@Inject
- 带注释的构造函数。 @Inject
进行注释并不合理(无论如何都不会实例化)。 B
和C
正在调用no-args构造函数,因为未指定一个构造函数等同于调用super()
。当你解决这个问题时(即用两个参数明确地调用super(a1, a2)
),你就会很好(并且它不需要对依赖注入做任何事情)。 / LI>