我是使用OSGi的新手,我对跟踪捆绑包有疑问。我正在使用BundleTracker,因为我想要特定的捆绑包,我想通过他们的ID知道我正在使用哪个捆绑包。一些Bundles(3)实现了相同的接口。我想跟踪那些实现该接口的bundle。我怎么能这样做?
答案 0 :(得分:2)
如果要选择特定服务,可以使用服务属性。这与bundle完全无关。这意味着您使用特定属性注册您的服务实现(这是BundleContext.registerService
中Dictionary
- 参数的用途)。
然后,您可以使用BundleContext.getServiceReferences
并指定仅选择具有正确属性的服务的filter-expression(语法描述为here)。您可以对此进行设置,以便始终获得最多包含一个元素的数组或集合。
如果您使用declarative services,这一切都会变得更加容易,因为您可以分别在提供和使用组件的服务描述符中指定属性和过滤器。您还可以通过configuration admin使其一端或两端可配置(服务组件配置中的属性将作为公开服务或使用的引用的属性进行传播)。我建议您在开始OSGi中的任何认真工作之前查看声明性服务。
请注意,您应该小心不要以这种方式实现硬编码布线,因为这会破坏模块化。