2

首先,很抱歉我无法为我的标题找到更具体的措辞。这是我的代码片段:

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关心方法是如何booA. 仅用于A实现。我不想继续通过and的构造函数注入。我有哪些选择?我想我可以直接在字段声明上使用注释而不是构造函数。这是一个好方法吗?还有其他推荐的方法吗?还是我在这里误解了关于 DI 的一些东西?clientbooclientBC@Injectclient

在此先感谢,巴尔加瓦

4

1 回答 1

-1

我最近开始使用的一种模式是让子类继承父类(显然),并注入它。父类只需要一个拷贝构造函数,也不能是抽象的:

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 中。

于 2012-06-15T07:12:53.367 回答