它们之间有什么关系?
- 规范和实现?
- 竞争对手?
- 毫无关联?
OSGi规范由两个独立的部分组成:核心和补充。
核心部分是Java模块系统的规范。因此,核心规范与DI概念无关。
另一方面,补充部分指定了OSGi容器可以提供的一系列服务。 在这些服务中,您将找到“声明性服务规范”(OSGi补充服务,第112章),它是将熟悉的DI概念引入OSGi的第一次尝试。 这个想法很简单:由于OSGi允许开发人员实现、定义和注册服务,声明性服务规范给开发人员提供了定义一个依赖于一系列其他底层服务的服务的可能性。这在OSGi中是一个特别有趣(也很难)的问题,因为服务根据定义不可靠,它们可以出现和消失。
除了声明性服务规范之外,还有至少两种其他流行的解决方案,试图在OSGi中提供更强大的DI框架:
值得注意的是,即将发布的OSGi规范R4.2版本将包含一个名为Blueprint Services的新补充规范,它将基于Spring DM框架为OSGi提供完整的DI解决方案(Spring团队为这个新规范做了大量贡献)。
它们没有关联。
编辑:
DI是Martin Fowler首次描述的一个概念,OSGi是Java的模块系统,实现了完整和动态的组件模型,由OSGi Alliance指定。
从概念上讲,它们都提供了“关注点分离”机制。
OSGI在模块层面上实现这一点 - 想想Eclipse架构,有多个插件,每个插件负责特定的关注点/功能。
DI是面向对象级别的 - 它提供了构建由多个对象连接在一起的应用程序的手段,每个对象负责其特定的功能。
技术上它们是不同的。 OSGI是具有多个实现的规范。 DI曾经是一个具有多种实现和API的设计模式。但是最近JCP进行了一些工作,试图标准化DI API(JSR 330)。