2

プロジェクトで picoContainer を使用しようとしています。私はそれについてほとんど知りませんが、それを試してみたいと思います。

私が理解しているように、picoContainer を作成し、コンポーネントを登録する必要があります。これは私がしました

public static PicoContainer getPicoContainer(){
     final MutablePicoContainer pico = new DefaultPicoContainer();
     pico.registerComponentImplementation(X.class);
     pico.registerComponentImplementation(A.class);
     pico.registerComponentImplementation(C.class);
     pico.registerComponentImplementation(V.class);
     pico.registerComponentImplementation(T.class);
     pico.registerComponentImplementation(D.class);

     return pico;
}

今私の問題は、コンポーネントが他のコンポーネントを取得するには、ピコのハンドルが必要だということです。コンポーネントにアクセスするには、これを行う必要があります

A juicer = pico.getComponent(A.class);

では、それぞれのコンストラクターで pico オブジェクトを渡す必要がありますか? これを工場に簡単に置き換えることができます。それでは、ポイントは何ですか?私はここで何かが欠けていると確信しています。助けていただければ幸いです。

4

1 に答える 1

2

一般的なパターンは、メイン コンテナーの工場をどこかに持つことです。スタンドアロン アプリの場合は、おそらく "public static void main()" エントリ ポイントになり、Web アプリの場合は、フロント コントローラー サーブレットまたはフィルターまたはコンテキスト リスナーになります (pico にはリスナー ケースのサポート クラスがあります)。したがって、エントリ ポイントで、上記の「public static PicoContainer getPicoContainer()」で述べた方法でコンテナを構成してから、コンテナ内のエントリ ポイントに制御を渡す必要があります。良い方法は、少なくとも 1 つのコンテナーのコンポーネントを使用してライフサイクル インターフェイスを実装することです ( http://picocontainer.codehaus.org/lifecycle.html) 次に、コンテナを start() して、すべてを接続します。通常、エントリ構成や特別なファクトリやトランザクション境界などの横にあるコンテナ自体には決してアクセスしないでください。

于 2014-02-19T07:28:09.837 に答える