OSGi和依赖注入之间有什么关系

fly*_*ire 11 java osgi dependency-injection

他们彼此是什么?

  • 规格和实施?
  • 竞争对手有哪些?
  • 无关?

Fil*_*evi 13

OSGi规范由两个独立的部分组成:核心和纲要.

核心部分是Java模块系统的规范.因此,核心规范与DI的概念没有关系.

另一方面,纲要部分指定了OSGi容器可以提供的一系列服务.在这些服务中,您将找到"声明服务规范"(OSGi Compendium Services,第112章),这是第一次将熟悉的DI概念引入OSGi.这个想法很简单:由于OSGi允许开发人员实现,定义和注册服务,因此声明性服务规范为开发人员提供了定义依赖于一系列其他底层服务的服务的可能性.这在OSGi中是一个特别有趣(和困难)的问题,因为根据定义,服务是不可靠的,它们可以出现和消失.

除了声明服务规范之外,还有至少两种其他流行的解决方案试图在OSGi中提供更强大的DI框架:

值得注意的是,即将推出的OSGi规范的R4.2版本将包含一个名为Blueprint Services的新概要规范,它将为基于Spring DM框架的OSGi提供完整的DI解决方案(Spring团队为这一新规范做出了重大贡献)


小智 10

他们是无关的.

编辑:

DI是一个conecpt首次描述马丁·福勒,OSGi是为Java实现一个完整的,动态的组件模型的模块系统,由指定的OSGi联盟.

  • DI可以用于与Java不同的语言,OSGi特定于Java
  • OSGi试图解决版本化组件的问题,DI是旧服务定位器模式的替代品.


Gre*_*zky 9

它们在概念上是相关的,因为它们都提供了"关注点分离"机制.

OSGI在模块级别上执行此操作 - 认为Eclipse架构具有多个插件,每个插件都负责特定的关注/功能.

DI面向对象级别 - 它提供了从连接在一起的多个对象构建应用程序的方法,每个对象负责其特定功能.

从技术上讲他们是不同的.OSGI是一个具有多个实现的规范.DI曾经是具有多种实现和API的设计模式.然而,JCP最近有一些工作要尝试标准化DI API(JSR 330)