假设您要基于属性的某些值来检索注册的服务,则需要使用 过滤器
(基于LDAP语法)。
例如:
int myport = 5000;String filter = "&(objectClass=" + MyInterface.class.getName() + ")(port=" + myport + ")";ServiceReference[] serviceReferences = bundleContext.getServiceReferences(null,filter);
您想在其中查找实现
MyInterface且
port属性值等于的服务
myport。
这是获取参考的相关javadoc。
备注1:
上面的示例和javadoc引用了发行版4.2。如果您不限于J2SE 1.4运行时,建议您看一下Release 4.3
语法,您可以在其中使用泛型。
备注2 :(由Ray提供)
您也可以通过从字符串创建Filter对象来预先检查过滤器的正确性
filterStr:
Filter filter = bundleContext.createFilter(filterStr);
这也使您可以将过滤器与其他条件匹配。您仍然可以通过
filterStr获取引用,因为没有重载可以说明
Filter参数。请注意,不过,这样你将检查正确性两次都
getServiceReferences和
createFilter扔
InvalidSyntaxException在解析过滤器。我猜当然不是效率低下的人,但是值得一提。



