0

Picocontainer Web (picocontainer-web-core-2.5.1.jar) を使用しようとしています。

すべてを構成し、コンテナから何かを取得しようとするまで、すべてが正常に機能することを確認しました... :p

私は、次のような PicoServletContainerFilter クラスの静的メソッド getRequestComponentForThread(Class type) を使用する必要があります。

public static Object getRequestComponentForThread(Class type) {
        MutablePicoContainer requestContainer = ServletFilter.currentRequestContainer.get();
        MutablePicoContainer container = new DefaultPicoContainer(requestContainer);
        container.addComponent(type);
        return container.getComponent(type);
}

しかし、ご覧のとおり、そのメソッドでは DefaultPicoContainer の新しいインスタンスが作成され、取得しようとしている型が登録されています。

  • タイプがクラスの場合 - 親コンテナからキャッシュされたものではなく、新しいインスタンスが作成されて返されます...
  • タイプがインターフェースの場合 - 3 行目 (addComponent) で実行時例外 (「'ExampleInterface' はインスタンス化できません」) がスローされます。

そして私の質問は:このライブラリを使用する方法? 私はそれを理解していると確信していましたが、この1つの方法の実装は私の心を吹き飛ばします...

4

2 に答える 2

1

実際には、特別な場合を除いて getComponent を使用しないでください。pico コンテキスト リスナーを web.xml に追加すると、App/Session/Request コンテナーが作成されます。スコープごとにコンポーネントを設定するだけで、picocontainer が自動的にデータを挿入し、必要に応じてコンポーネントをインスタンス化します。Startable ライフサイクル インターフェイスも使用します。

于 2014-01-09T14:55:00.157 に答える