OSGi/Felix声明式服务:如何过滤要绑定的服务?
我正在使用 Apache Felix 及其声明性服务 (SCR) 来连接捆绑包之间的服务依赖关系。
例如,如果我需要访问 java.util.Dictionary,我可以说以下内容让 SCR 提供一个:
/**
* @scr.reference name=properties interface=java.util.Dictionary
*/
protected void bindProperties(Dictionary d) {
}
protected void unbindProperties(Dictionary d) {
}
现在,我有多个可用的 Dictionary 服务,并且我想使用“name”服务属性来过滤它们(我只想要“name=myDictionary”)。 我可以使用代码(使用 ServiceTracker)来做到这一点,但我宁愿在 @scr 注释中指定过滤器。
I am using Apache Felix and its Declarative Services (SCR) to wire the service dependencies between bundles.
For example, if I need access to a java.util.Dictionary I can say the following to have SCR provide one:
/**
* @scr.reference name=properties interface=java.util.Dictionary
*/
protected void bindProperties(Dictionary d) {
}
protected void unbindProperties(Dictionary d) {
}
Now, I have more than one Dictionary service available, and I want to filter them using the "name" service property (I only want "name=myDictionary"). I can do that with code (using a ServiceTracker), but I'd rather specify the filter in the @scr annotation instead.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为
应该在
@scr.reference
注释中解决这个问题。 请参阅 http://felix.apache.org/site/apache -felix-maven-scr-plugin.htmlI think
should do the trick in the
@scr.reference
annotation. See http://felix.apache.org/site/apache-felix-maven-scr-plugin.html在标准DS中,您可以使用参考元素的目标属性。 在Felix世界里,可以使用注释,我不知道相当于什么。
目标属性是 LDAP 过滤器,它与服务属性进行匹配。 所以,你的过滤器应该是:
(名称=我的词典)
In standard DS, you can use target attribute of the reference element. In Felix world, where annotations can be used, I don't know what is the equivalent.
The target attribute is an LDAP filter, which matches against the service properties. So, your filter should be:
(name=myDictionary)