gpt4 book ai didi

java - ServiceTracker、服务引用和服务引用之间的区别

转载 作者:行者123 更新时间:2023-12-01 18:39:58 26 4
gpt4 key购买 nike

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

我想了解 ServiceTracker、ServiceReference 和 ServiceReferences 在使用上的主要区别以及优势

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

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

谁能解释一下吗?谢谢。

最佳答案

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

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

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

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

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

关于java - ServiceTracker、服务引用和服务引用之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20347288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com