我正在创建一些OSGi包。他们注册服务并获得(当然也使用)彼此的服务。
我决定使用ServiceTracker
而不是声明服务。
在我搜索有关此信息时,我发现了两种跟踪服务的方法。
第一个是为每个服务创建一个自己的跟踪器类,扩展 ServiceTracker
类,并覆盖需要重写的方法。然后在激活器类中创建此跟踪器类的新实例,为其提供捆绑上下文并打开它以进行跟踪。
另一种方法是为每个服务创建一个跟踪器类,实现 ServiceTrackerCustomizer
接口,并覆盖需要重写的方法。然后在激活器类中创建ServiceTracker
类的新实例,为其提供捆绑上下文,需要跟踪的服务名称和我们的定制器类的新实例。然后打开它进行跟踪。
这两种方法之间有什么不同吗?我会说不。在ServiceTracker javadoc我可以看到ServiceTracker
类也实现了ServiceTrackerCustomizer
接口。
请您告诉我两种方法的优缺点?提前谢谢。
答案 0 :(得分:1)
以下是我的理由:
子类ServiceTracker如果
在以下情况下实施界面:
如果
,请勿直接使用 ServiceTracker答案 1 :(得分:1)
在使用OSGi开发的12年多的时间里,我不认为我曾写过一篇async.waterfall()
。恕我直言,直接子类ServiceTrackerCustomizer
并离开自定义程序参数ServiceTracker
会更方便。
更容易进行子类化的一个简单原因是,您不需要提供null
方法的实现,这很少需要。
但从功能上来说,结果将是相同的,因此它非常符合个人喜好。