8

私はこのシナリオを持っています。同じインターフェースを提供する 3 つの宣言型サービスがあります (たとえば、リーダー インターフェースで、readerimpl1-database-readerimpl2-flat file-readerimpl3-memory があります)。データベースの実装のみにバインドするコンシューマーが必要です。コンポーネント定義で名前を付けるので、その名前がレジストリにあると確信しているので、activate メソッドを追加すると、その名前を使用してコンポーネント コンテキストから検索できます。

サービス名をパラメーターとして使用しながら、バインド/バインド解除を介して試してみたいと思います。コンポーネント参照要素の「ターゲット」パラメーターを使用してこれを行うことができると確信していますが、使用方法がわかりません。

他の誰かがこれをしましたか?

これは @Reference(mapped-name="foo") を使用するのと似ています

4

1 に答える 1

15

Target は単なる OSGiフィルターです。これを使用して、任意のサービス プロパティでフィルタリングできます。そのため、サービスbackendに値fileまたはdatabaseで名前が付けられたプロパティがある場合、次のターゲットにバインドできます。

<scr:reference ... target="(backend=database)"/>

データベース バックエンド自体を持つサービスは、次のように登録されます。

<scr:component ...>
    ...
    <property name="backend" type="String" value="database"/>
</scr:component>
于 2011-07-28T03:57:30.827 に答える