我是OSGi的新手,已经学习了一段时间。

我想知道用法的主要区别以及ServiceTracker, ServiceReference & ServiceReferences的好处。

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

我读过ServiceTracker的某个地方是通过编程方式获取对服务的引用。即,编写ServiceTracker代码,以“跟踪”对另一项服务的引用,让您在可用时使用它。但实际上,我看不出它是如何完成的!

谁能解释一下?
谢谢。

最佳答案

我建议您不要使用!

ServiceReference仅表示OSGi服务注册表中的条目。您可能是说您正在使用BundleContext.getServiceReference()之类的API调用来访问服务。这是使用OSGi服务的最低可能级别,并且您可能已经注意到,它相当复杂,并将代码耦合到OSGi API。

ServiceTracker的级别略高,它包装了较低级别的调用。关键优势在于它会在服务消失时通知您,这非常重要,因为服务是动态的。但是,ServiceTracker仍然是非常低级的,它仍然将您的代码耦合到OSGi API。

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

另外,我建议您学习声明式服务。这为您提供了基于依赖项注入的编程模型,并使您与OSGi API分离。它更容易,更安全!您可以从此处的教程开始:http://bndtools.org/tutorial.html

10-04 17:00