首页 文章

Osgi声明服务条件绑定

提问于
浏览
8

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

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

还有其他人这样做过吗?

这与使用@Reference(mapped-name =“foo”)类似

1 回答

  • 14

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

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

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

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

相关问题