我现在正在处理OSGi服务,我有一个关于在OSGi中使用服务的问题.有一些不同的注册用户服务方式.有人可以解释OSGi服务跟踪器和声明服务之间的区别吗?哪一个更好?
解决方法
在OSGi中,ServiceTracker是获取对服务引用的一种编程方式.即编写ServiceTracker代码,“跟踪”对另一个服务的引用,让我们在可用时使用它.
相比之下,Declarative Services(DS)允许您声明注入到组件中的依赖项. DS就是依赖注入的一种形式.服务之间的依赖关系图及其启动顺序将决定您的服务何时开始. DS定义中的基数属性允许您声明关系是否为强制性(1..1),具有至少一个(1..n),可选(0..1)或多个可选(0..n) ).
当您声明强制性关系时,您的服务将不会启动,直到所有依赖关系满足为止.
当您声明可选关系时,无论依赖关系的状态如何,您的服务都将启动,但您需要注意代码中对服务的引用可能为null.
从实践的角度来看,ServiceTracker是编写和维护的大量样板代码.考虑到OSGi服务的动态性质,OSGi规范允许许多状态需要考虑.DS会给你一个干净的方式来声明和维护你的依赖.明确的依赖关系将有助于您保持运行时环境的一致性.