Osgi声明服务条件绑定

时间:2011-07-27 19:57:06

标签: osgi declarative-services

我有这种情况,我有三个声明性服务提供相同的接口(比如一个读者接口,我有readerimpl1-database- readerimpl2-flat file- readerimpl3-memory)。我希望有一个只绑定到数据库实现的使用者。在组件定义中,我们给它一个名称,所以我很确定名称在注册表中,所以如果我要添加一个activate方法,我可以使用名称从组件上下文中查找。

我想通过bind / unbind尝试使用服务名称作为参数。我很确定组件引用元素中的“target”参数可用于执行此操作,但我还没有找到如何使用它。

还有其他人这样做过吗?

这与使用类似 @Reference(映射名= “foo” 的)

1 个答案:

答案 0 :(得分:14)

目标只是一个OSGi filter。您可以使用它来过滤任何服务属性。因此,如果您的服务具有值为backendfile的名为database的属性,则可以绑定以下目标:

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

具有数据库后端的服务本身将注册为:

<scr:component ...>
    ...
    <property name="backend" type="String" value="database"/>
</scr:component>