0

宣言型サービスのインスタンス化を制御する簡単な方法を探しています。

私が欲しいのは、コンポーネントのインスタンスを返すように求められるが、インスタンス化を制御できるファクトリのようなものです。

現在、特定の辞書で newInstance を呼び出すことができる ComponentFactory を見つけました。しかし、私が本当に欲しいのは、IComponent が宣言型サービス インターフェイスであり、MyComponent が実装クラスであると仮定すると、このようなものです。

public class MyComponentFactory implements ? {

   public IComponent newInstance() {
       return new MyComponent("firstParameter", "secondParameter");
   }
}

宣言型サービスでこのようなことは可能ですか? または、バンドル アクティベーション コードで独自のサービス登録を使用する必要がありますか?

前もって感謝します

4

2 に答える 2

4

DS は、探しているレベルのインスタンス作成の間接化を提供しません。DS は常に public no-args コンストラクターを使用し、指定されたアクティベーター メソッドを呼び出してインスタンスの初期化を完了します。

于 2013-09-20T10:58:38.597 に答える
0

このようなサービスのインスタンス化制御の代替手段の 1 つは、DS と CM の組み合わせを使用することです。

DS xml で configuration-policy="require" を設定し、CM を使用して構成インスタンスを作成する必要があります。これを使用して、必要なすべてのプロパティ (もちろん DS でサポートされているタイプのみ) を含むディクショナリを、作成されたサービス インスタンスに渡します。 . プロパティ ファイルと Felix File Install をその構成に使用することもできます。

それだけでは不十分な場合は、CM を使用して構成を追加した直後に、新しく作成されたサービスを追跡し、setup(args) メソッドを呼び出す別の方法があります。

于 2013-09-21T23:38:49.197 に答える