spring source dm server特定的Import-Bundle和OSGi的Require-Bundle有什么区别?
我很困惑是否在我的项目中使用Import-Bundle或Require-Bundle.
Pet*_*ens 16
Import-Bundle类似于Require-Bundle,它创建了对另一个bundle的完全依赖,包括该bundle的依赖.这种传递性是不好的,因为你不知道你依赖什么,创造了我们在面向对象编程中如此熟悉的臭名昭着的" 泥球大 "问题.
在OO中,我们通过使用接口找到了解决这种纠缠的方法,它们将实现与规范分开.OSGi是围绕类似的服务合同概念构建的.这些契约(接口,权限,帮助程序类)存储在一个包中.在基于合同的编程中,您依赖于合同,而不是实现.因此,OSGi捆绑包应该依赖于包,因为它们代表合同.
Import-Package <=> interface
Import-Bundle/Require-Bundle <=> implementation class
Run Code Online (Sandbox Code Playgroud)
Import-Bundle不是OSGi,它是一个专有的Spring扩展.它是Require-Bundle的一种清洁形式; 不清洁是支持一些Eclipse用例所必需的.OSGi决定不采用此标头,因为如果要从组件构建系统,Require-Bundle/Import-Bundle基本上会被破坏.