我是新手OSGi
,并且已经研究了一段时间。
我想知道使用上的主要区别以及ServiceTracker, ServiceReference & ServiceReferences
.
ServiceTracker
我使用了两个&的示例ServiceReference
,如果服务不可用,则两者都返回NULL
。但是,如果服务可用,那么两者都可以正常工作,但我无法观察两者之间有什么区别。
我在某处读到的ServiceTracker
是一种获取服务引用的编程方式。即编写ServiceTracker
“跟踪”对另一个服务的引用的代码,并让您在它可用时使用它。但在实际实践中我看不到它是如何完成的!
有人可以解释一下吗?谢谢。
我建议您两者都不要使用!
ServiceReference
只是代表 OSGi 服务注册表中的一个条目。您可能的意思是您正在使用 API 调用(例如BundleContext.getServiceReference()
. 这是使用 OSGi 服务的最低级别,您可能已经注意到它相当复杂,并且它将您的代码与 OSGi API 耦合在一起。
ServiceTracker
级别稍高,它环绕较低级别的调用。主要优点是当服务消失时它会通知您,这非常重要,因为服务是动态的。然而ServiceTracker
它仍然非常低级,并且它仍然将您的代码与 OSGi API 耦合。
我强烈建议您避免使用最低级别的 API(基于ServiceReference
)和 ,ServiceTracker
直到您获得了更多的 OSGi 经验。
作为替代方案,我建议学习声明式服务。这为您提供了一个基于依赖注入的编程模型,并将您与 OSGi API 解耦。这更加容易和安全!您可以按照此处的教程开始: http: //bndtools.org/tutorial.html
归档时间: |
|
查看次数: |
230 次 |
最近记录: |