OSGI中使用接口来定义服务,所以每个服务理论上都是可以有多个不同的实现。在这种情况下,如果不做任何指定,Felix框架在通过ServiceReference获取服务对象时,会返回其中一个服务实现。具体Felix如何选择多个实现中的一个,算法尚不明确。但是我们程序中不能指望这个不确定的服务实现,所以必须通过某种方法,指定需要的服务实现。具体方法有一下几种:
1.在代码中通过调用context的Collection<ServiceReference<S>> getServiceReferences(Class<S> clazz,String filter)方法获得满足过滤条件的ServiceReference集合,clazz是服务接口类,filter是过滤表达式,如:(jobname=job2),这个例子中jobname是Job服务定义时提供的property的name,job2是value。