如果每个捆绑包必须在另一个捆绑包中导入,那么它们是否应该是一个服

时间:2013-12-03 06:53:36

标签: java service osgi osgi-bundle

我一直在研究OSGi一周。我研究了OSGi services,但无法确定每个需要在另一个包中导入的bundle是否必须是服务。我是否可以将它们用作简单JARs而不是服务?

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

我希望我明白我的问题。

1 个答案:

答案 0 :(得分:2)

服务是捆绑之间的会合点。通常,捆绑包依赖于许多服务并提供0或更多服务。由于服务仅指定合同,因此仅取决于合同。这样,您可以将实际依赖项(合同)与这些依赖项(bundle)的提供程序分开。

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

那就是说,你没有被迫使用服务。 Bundle可以导入其他bundle的类,并为其他bundle提供类。

那么何时使用服务?通常,服务是一种抽象:日志服务,事件管理服务,地理服务等。您知道它应该为您做什么,但您对细节不感兴趣。通常,服务可以以不同的方式实施。

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