-1

我是使用 OSGi 的新手,我对跟踪 Bundles 有疑问。我使用 BundleTracker 是因为我想要特定的捆绑包,并且我想通过他们的 ID 知道我正在使用哪个捆绑包。一些 Bundles (3) 实现了相同的接口。我只想跟踪那些实现该接口的包。我怎样才能做到这一点?

4

1 回答 1

2

如果要选择特定服务,可以使用服务属性。这与捆绑包完全无关。这意味着您使用特定属性注册您的服务实现(这就是Dictionary-argument 的BundleContext.registerService用途)。

然后,您可以使用BundleContext.getServiceReferences并指定仅选择具有正确属性的服务的过滤器表达式(语法在此处描述)。您可以进行设置,以便始终获得最多包含一个元素的数组或集合。

如果您使用声明式服务,这一切都会变得容易得多,因为您可以分别在提供和消费组件的服务描述符中指定属性和过滤器。您还可以通过配置管理员使其一端或两端可配置(服务组件配置中的属性作为公开服务或消费引用的属性传播)。我真的建议您在开始任何严肃的 OSGi 工作之前检查声明式服务。

请注意,您应该小心不要以这种方式实现硬编码接线,因为这会破坏模块化。

于 2012-10-25T20:19:47.027 回答