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ん。実装のみに使用します。andのコンストラクターを介して注入し続けたくありません。私のオプションは何ですか?コンストラクターの代わりに、フィールド宣言で直接アノテーションを使用できると思います。これは良いアプローチですか?他におすすめの方法はありますか?それとも、ここでDIについて誤解していますか?CbooAAclientbooclientBC@Injectclient

前もってありがとう、バルガヴァ

4

1 に答える 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 に答える