如果必须将每个bundle导入到另一个bundle中,则每个bundle应该是一个服务吗



我已经学习OSGi一周了。我研究了OSGi services,但没有发现是否每个需要导入到另一个捆绑包中的bundle都必须是一个服务。我是否可以将它们用作简单的JARs而不是服务?

如果是,那么在什么情况下我应该将捆绑包作为服务?

我希望我把问题说清楚了。

服务是捆绑包之间的交汇点。通常,捆绑包依赖于多个服务,并提供0个或多个服务。由于服务只指定合同,因此您只能依赖于合同。通过这种方式,您可以将实际的依赖关系(契约)与这些依赖关系(捆绑包)的提供者分离开来。

随着时间的推移,您会发现您的软件变得更加稳定,因为它不受运行时环境中各种变化的影响:重构捆绑包、不同的实现、不同的配置。您应该将服务视为体系结构的铰链。

也就是说,你不会被迫使用服务。Bundle可以导入其他Bundle的类,并向其他Bundle提供类。

那么什么时候使用服务呢?通常,服务是一个抽象:日志服务、事件管理服务、地理服务等。你知道它应该为你做什么,但你对细节不感兴趣。一般来说,服务可以用不同的方式实现。

如果API和实现合二为一,那么它就不是一个服务。像ASM(字节码工程)或Guava这样的库不是服务,因为API是实现,并且两个库都不持有状态。

最新更新