定义具有多个属性的 OSGi DS 参考过滤器
Define OSGi DS Reference Filter with multiple properties
我的问题很简单,是否可以基于多个 属性 创建一个 @Reference 过滤器?如果是这样,语法是什么?
对于背景,我的服务如下所示:
@Component (property = {"myProp1=foo", "myProp2=bar"})
public class MyService implements IMyService
...
使用 IMyService 的东西只需要一个 myProp1=foo 和 myProp2=bar。我已经尝试了多种语法形式,但还没有找到一种有效的语法形式。
private @Reference (target = "(myProp1=foo)(myProp2=bar)") IMyService svc;
上面的内容确实解决了,我得到了一个参考,但是记录了一个错误,“目标 属性 中的依赖语法无效...”。因此,尽管它有效,但它似乎是侥幸,因为语法存在一些问题。
private @Reference (target = "((myProp1=foo)(myProp2=bar))") IMyService svc;
private @Reference (target = "((myProp1=foo) (myProp2=bar))") IMyService svc;
private @Reference (target = "((myProp1=foo), (myProp2=bar))") IMyService svc;
private @Reference (target = "{(myProp1=foo), (myProp2=bar)}") IMyService svc;
private @Reference (target = "[(myProp1=foo), (myProp2=bar)]") IMyService svc;
上面的None 甚至可以编译,这是很好的验证。
private @Reference (target = "([myProp1=foo, myProp2=bar])") IMyService svc;
private @Reference (target = "(myProp1=foo, myProp2=bar)") IMyService svc;
上面编译但根本没有return服务。
private @Reference (target = "(myProp1=foo)") IMyService svc;
如上所示在单个字段上过滤效果很好,但这不是我正在寻找的完整解决方案。
javadoc for the @Reference annotation 未提供有关如何使用“目标”参数的任何指导。
当然可以,过滤格式是'ldap style'。 and 运算符是“&”,您在子表达式之前使用它。
在你的情况下它会是这样的:
(&(myProp1=foo)(myProp2=bar))
供参考:
https://osgi.org/javadoc/r2/org/osgi/framework/Filter.html
我的问题很简单,是否可以基于多个 属性 创建一个 @Reference 过滤器?如果是这样,语法是什么?
对于背景,我的服务如下所示:
@Component (property = {"myProp1=foo", "myProp2=bar"})
public class MyService implements IMyService
...
使用 IMyService 的东西只需要一个 myProp1=foo 和 myProp2=bar。我已经尝试了多种语法形式,但还没有找到一种有效的语法形式。
private @Reference (target = "(myProp1=foo)(myProp2=bar)") IMyService svc;
上面的内容确实解决了,我得到了一个参考,但是记录了一个错误,“目标 属性 中的依赖语法无效...”。因此,尽管它有效,但它似乎是侥幸,因为语法存在一些问题。
private @Reference (target = "((myProp1=foo)(myProp2=bar))") IMyService svc;
private @Reference (target = "((myProp1=foo) (myProp2=bar))") IMyService svc;
private @Reference (target = "((myProp1=foo), (myProp2=bar))") IMyService svc;
private @Reference (target = "{(myProp1=foo), (myProp2=bar)}") IMyService svc;
private @Reference (target = "[(myProp1=foo), (myProp2=bar)]") IMyService svc;
上面的None 甚至可以编译,这是很好的验证。
private @Reference (target = "([myProp1=foo, myProp2=bar])") IMyService svc;
private @Reference (target = "(myProp1=foo, myProp2=bar)") IMyService svc;
上面编译但根本没有return服务。
private @Reference (target = "(myProp1=foo)") IMyService svc;
如上所示在单个字段上过滤效果很好,但这不是我正在寻找的完整解决方案。
javadoc for the @Reference annotation 未提供有关如何使用“目标”参数的任何指导。
当然可以,过滤格式是'ldap style'。 and 运算符是“&”,您在子表达式之前使用它。
在你的情况下它会是这样的:
(&(myProp1=foo)(myProp2=bar))
供参考: https://osgi.org/javadoc/r2/org/osgi/framework/Filter.html