我有这种情况,我有三个声明性服务提供相同的接口(比如一个读者接口,我有readerimpl1-database- readerimpl2-flat file- readerimpl3-memory)。我希望有一个只绑定到数据库实现的使用者。在组件定义中,我们给它一个名称,所以我很确定名称在注册表中,所以如果我要添加一个activate方法,我可以使用名称从组件上下文中查找。
我想通过bind / unbind尝试使用服务名称作为参数。我很确定组件引用元素中的“target”参数可用于执行此操作,但我还没有找到如何使用它。
还有其他人这样做过吗?
这与使用类似 @Reference(映射名= “foo” 的)
答案 0 :(得分:14)
目标只是一个OSGi filter。您可以使用它来过滤任何服务属性。因此,如果您的服务具有值为backend
或file
的名为database
的属性,则可以绑定以下目标:
<scr:reference ... target="(backend=database)"/>
具有数据库后端的服务本身将注册为:
<scr:component ...>
...
<property name="backend" type="String" value="database"/>
</scr:component>