el_*_*rdo 8 osgi declarative-services
我有这个场景,我有三个声明性服务,提供相同的接口(比如一个读者接口,我有readerimpl1-database- readerimpl2-flat file- readerimpl3-memory).我希望有一个只绑定到数据库实现的使用者.在组件定义中,我们给它一个名称,所以我很确定名称在注册表中,所以如果我要添加一个activate方法,我可以使用名称从组件上下文中查找.
我想通过bind/unbind尝试使用服务名称作为参数.我很确定组件引用元素中的"target"参数可用于执行此操作,但我还没有找到如何使用它.
还有其他人这样做过吗?
这与使用@Reference(mapped-name ="foo")类似
Iva*_*rov 15
Target只是一个OSGi 过滤器.您可以使用它来过滤任何服务属性.所以,如果您的服务已命名的属性backend与价值file或者database,你可以用下面的目标约束:
<scr:reference ... target="(backend=database)"/>
Run Code Online (Sandbox Code Playgroud)
数据库后端本身的服务将注册为:
<scr:component ...>
...
<property name="backend" type="String" value="database"/>
</scr:component>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3085 次 |
| 最近记录: |