首先,很抱歉我无法为我的标题找到更具体的措辞。这是我的代码片段:
public abstract class A {
// dependencies
private Client client;
@Inject
public A(Client client) {
this.client = client;
}
public abstract foo();
protected void bar() {
client.bar();
}
}
public class B extends A {
...
}
public class C extends A {
...
}
我的问题是:B
和C
实际上都不关心boo
方法是如何在A
中实现的。 A
使用 client
仅用于 boo
实现。我不想通过 B
和 C
的构造函数继续注入(inject) client
。我有哪些选择?我想我可以直接在 client
字段声明上使用 @Inject
注释而不是构造函数。这是一个好方法吗?还有其他推荐的方法吗?或者我在这里对 DI 有什么误解吗?
提前致谢, 巴尔加瓦
最佳答案
我最近开始使用的一种模式是让子类继承父类(显然),并注入(inject)它。父类只需要一个拷贝构造函数,也不能是抽象的:
class A {
private Client client;
@Inject
public A(Client client) {
this.client = client;
}
public A(A other) {
this(other.client);
}
}
class B extends A {
@Inject
public Child(A a, Others others) {
super(a);
}
}
A的依赖留在A,B的依赖留在B。
关于java - 带继承的 Guice 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10838756/