什么是“自营捆绑”和“需要束”之间的区别?(What is the difference betwe

2019-07-30 11:40发布

是什么春源DM服务器的特定进口包和OSGi的要求束之间的区别?
我很困惑是否使用进口束或需要束在我的项目。

Answer 1:

进口束类似于需求束,它创建于其他捆绑一个完整的依赖,包括包的依赖性。 这传递是不好的,因为你不知道你依赖的东西,创造了臭名昭著的“ 大泥球 ”的问题我们很熟悉面向对象程序设计。

在面向对象的,我们已经找到了解决这个纠缠的使用接口,他们分开规范执行。 OSGi是一项类似的内置虽然服务合同的更高阶的概念。 这些合同(接口,权限,辅助类)都存储在一个包。 在基于契约编程你所依赖的合同,而不是实现。 人机工程学,一个OSGi bundle应该依赖于包装,因为它们代表了合同。

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

进口的程序包不是OSGi的,它是一种专有的Spring扩展。 这是需要束清洁器形式; 在不洁,有必要支持一些Eclipse的使用情况。 OSGi的决定不采纳这个头,因为如果你想从组件构建系统的要求束/导入束从根本上打破。



Answer 2:

理想情况下,你应该尝试宁愿使用进口包代替。 它使你少捆绑互相依赖的。 它还允许以表明您仅依赖于包的一部分。 这也是管理版本重要。 在OSGi中,你可以定义导出包独立的软件包版本的版本。 所以,你可以确保你只能更改API的版本,如果它真的改变了。 这可以使你的应用程序更易于管理。



Answer 3:

它的解释这里的SpringSource的

所以总结:进口束将导入某个包的所有导出包,它会解决部署时,虽然需要束确实需要与该类型捆绑,并且关系在运行时保持这种方式。

通常情况下,他们会表现得几乎相同。 例如,它可以是不同的,当:

  • 你有“分裂包”:包中存在的多个包,你可能会“丢失”与进口封装/进口捆绑依赖,你只能要求束表达(请注意,你真的应该避免拆分包如果你能

  • 我认为Bundle->套餐分辨率是当你部署包。 如果重新部署导出的捆绑与出口不同版本的包,我不认为束会注意到。 说实话,我不完全知道这一个。

所有的一切,我会说坚持使用OSGi标准:进口包装或需要管束,如果你真的需要它。 您将有更多的信息,但是你会在长期内使更多的选择。



文章来源: What is the difference between “Import-Bundle” and “Require-Bundle”?