我一直在研究OSGi
一周。我研究了OSGi services
,但无法确定每个需要在另一个包中导入的bundle
是否必须是服务。我是否可以将它们用作简单JARs
而不是服务?
如果是,那么在什么情况下我应该将捆绑作为服务?
我希望我明白我的问题。
答案 0 :(得分:2)
服务是捆绑之间的会合点。通常,捆绑包依赖于许多服务并提供0或更多服务。由于服务仅指定合同,因此仅取决于合同。这样,您可以将实际依赖项(合同)与这些依赖项(bundle)的提供程序分开。
您会发现随着时间的推移,您的软件变得更加稳定,因为它不受运行时环境中各种变化的影响:重构捆绑包,不同的实现,不同的配置。您应该将服务视为架构的缩影。
那就是说,你没有被迫使用服务。 Bundle可以导入其他bundle的类,并为其他bundle提供类。
那么何时使用服务?通常,服务是一种抽象:日志服务,事件管理服务,地理服务等。您知道它应该为您做什么,但您对细节不感兴趣。通常,服务可以以不同的方式实施。
如果API和实现合并为一个,它就不是服务。像ASM(字节码工程)或Guava这样的库不是服务,因为API是实现,并且两个库都没有状态。