0

私は次のクラスを持っています:

public class MyClass {
    @Inject
    private MyAnotherClass myAnotherClass;

    public MyClass() {
        //Perform operations on myAnotherClass.
    }
}

のインスタンスを必要とするコンストラクターでいくつかのことを行う必要がありますmyAnotherClass。残念ながらmyAnotherClass、コンストラクターのコードが実行された後に挿入されます。つまり、操作を実行していnullます...

もちろん、古典的な方法 ( MyAnotherClass myAnotherClass = new MyAnotherClass()) でコンストラクターで直接インスタンス化することもできますが、この状況で行うのは正しいことではないと思います。

この問題を解決するために、どのような解決策を提案しますか?

4

1 に答える 1

7

最良のオプション:

public class MyClass {
  private final MyAnotherClass myAnotherClass;

  public MyClass(MyAnotherClass other) {
    this.myAnotherClass = other;
    // And so forth
  }
}

その後、T5-IoC はコンストラクター インジェクションを使用するため、MyClass自分で「新規作成」する必要はありません。詳細については、 Tapestry IOC サービスの定義を参照してください。

または:

public class MyClass {
  @Inject
  private MyAnotherClass myAnotherClass;

  @PostInjection
  public void setupUsingOther() {
    // Called last, after fields are injected
  }
}
于 2013-02-27T22:38:10.863 に答える