osgi - "Import-Bundle"和 "Require-Bundle"有什么区别?

标签 osgi spring-dm

spring source dm server specific 有什么区别?进口捆绑和 OSGi 的 需求捆绑 ?
我很困惑是否在我的项目中使用 Import-Bundle 或 Require-Bundle。

最佳答案

Import-Bundle 与 Require-Bundle 类似,它创建对另一个包的完整依赖项,包括该包的依赖项。这种传递性很糟糕,因为您不知道自己依赖什么,从而产生了我们在面向对象编程中非常熟悉的臭名昭著的“big ball of mud”问题。

在 OO 中,我们通过使用接口(interface)找到了解决这种纠缠的方法,它们将实现与规范分开。 OSGi 是围绕类似的构建,尽管它具有更高阶的服务契约(Contract)概念。这些契约(接口(interface)、权限、助手类)存储在一个包中。在基于契约(Contract)的编程中,您依赖于契约(Contract),而不是实现。 Ergo,一个 OSGi 包应该依赖于包,因为它们代表了合约。

 Import-Package               <=> interface
 Import-Bundle/Require-Bundle <=> implementation class

Import-Bundle 不是 OSGi,它是专有的 Spring 扩展。它是 Require-Bundle 的一种更简洁的形式;不洁是支持某些 Eclipse 用例所必需的。 OSGi 决定不采用此 header ,因为如果您想从组件构建系统,Require-Bundle/Import-Bundle 从根本上被破坏了。

关于osgi - "Import-Bundle"和 "Require-Bundle"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11559980/

相关文章:

maven - 尝试在 Maven 中构建一个带有嵌入式依赖项的 OSGi 包。似乎无法从 BND 类路径中排除传递依赖项

osgi - 仅在 servicemix 上列出 bundle ID

java - 我如何在 OSGi 包中使用 Spring bean?

java - Spring OSGI 服务引用接口(interface)必须由消费包显式导入?

java - Spring-DM OSGI 服务和 @Autowired 的问题

osgi - 如何将 SpringSource dm 服务器集成到另一个基于 OSGi 的应用程序服务器中?

Liferay 模块(OSGi 包)保留在 "Stopping"

logging - OSGi - 外部 jar 文件的日志记录配置

jasper-reports - 在 Jasper Report 中使用多个 JavaBean 数据源