ServiceTracker、ServiceReference 和 ServiceReferences 之间的差异

Amr*_*rit 0 java service osgi

我是新手OSGi,并且已经研究了一段时间。

我想知道使用上的主要区别以及ServiceTracker, ServiceReference & ServiceReferences.

ServiceTracker我使用了两个&的示例ServiceReference,如果服务不可用,则两者都返回NULL。但是,如果服务可用,那么两者都可以正常工作,但我无法观察两者之间有什么区别。

我在某处读到的ServiceTracker是一种获取服务引用的编程方式。即编写ServiceTracker“跟踪”对另一个服务的引用的代码,并让您在它可用时使用它。但在实际实践中我看不到它是如何完成的!

有人可以解释一下吗?谢谢。

Nei*_*ett 5

我建议您两者都不要使用!

ServiceReference只是代表 OSGi 服务注册表中的一个条目。您可能的意思是您正在使用 API 调用(例如BundleContext.getServiceReference(). 这是使用 OSGi 服务的最低级别,您可能已经注意到它相当复杂,并且它将您的代码与 OSGi API 耦合在一起。

ServiceTracker级别稍高,它环绕较低级别的调用。主要优点是当服务消失时它会通知您,这非常重要,因为服务是动态的。然而ServiceTracker它仍然非常低级,并且它仍然将您的代码与 OSGi API 耦合。

我强烈建议您避免使用最低级别的 API(基于ServiceReference)和 ,ServiceTracker直到您获得了更多的 OSGi 经验。

作为替代方案,我建议学习声明式服务。这为您提供了一个基于依赖注入的编程模型,并将您与 OSGi API 解耦。这更加容易安全!您可以按照此处的教程开始: http: //bndtools.org/tutorial.html