OSGi服务跟踪器和声明服务之间有什么不同

All*_*eng 10 java osgi

我现在正在开发OSGi服务,我对在OSGi中使用服务有疑问.注册用户服务有一些不同的方式.谁能解释OSGi服务跟踪器和声明服务之间的区别?哪一个更好?

maa*_*asg 14

在OSGi中,ServiceTracker是一种获取服务引用的编程方式.即你编写ServiceTracker代码,"跟踪"对另一个服务的引用,让你在它可用时使用它.

相比之下,Declarative Services(DS)允许您声明注入组件的依赖项.因此,DS是一种依赖注入形式.服务之间的依赖关系图及其启动顺序将决定您的服务何时启动.DS定义中的基数属性允许您声明关系是否是必需的(1..1),多个具有至少一个(1..n),可选(0..1)或多个可选(0..n) ).声明强制关系时,在满足所有依赖关系之前,您的服务将无法启动.声明可选关系时,无论依赖关系的状态如何,您的服务都将启动,但您需要注意代码中对服务的引用可能为null.

从实际角度来看,ServiceTracker是很多编写和维护的样板代码.鉴于OSGi服务的动态特性,OSGi规范允许的许多状态需要加以考虑.DS将为您提供一种声明和维护依赖项的简洁方法.定义良好的依赖项将帮助您保持运行时环境的一致性.