【发布时间】:2010-11-24 08:18:09
【问题描述】:
它们是什么?
- 规范和实现?
- 竞争对手?
- 不相关?
【问题讨论】:
标签: java dependency-injection osgi
它们是什么?
【问题讨论】:
标签: java dependency-injection osgi
OSGi 规范由两个独立的部分组成:核心和纲要。
核心部分是Java模块系统的规范。因此,核心规范与 DI 的概念没有任何关系。
另一方面,概要部分指定了 OSGi 容器可以提供的一系列服务。 在这些服务中,您会发现“Declarative Services Specification”(OSGi Compendium Services,第 112 章),这是将熟悉的 DI 概念引入 OSGi 的第一次尝试。 这个想法很简单:由于 OSGi 允许开发人员实现、定义和注册服务,因此声明式服务规范使开发人员可以定义依赖于一系列其他底层服务的服务。这是 OSGi 中一个特别有趣(也很困难)的问题,因为服务从定义上讲是不可靠的,它们可以出现和消失。
除了声明式服务规范之外,至少还有两个其他流行的解决方案试图在 OSGi 中提供更强大的 DI 框架:
值得注意的是,即将发布的 R4.2 版本的 OSGi 规范将包含一个名为 Blueprint Services 的新纲要规范,它将为基于 Spring DM 框架的 OSGi 提供完整的 DI 解决方案(Spring 团队为这个新规范)
【讨论】:
它们不相关。
编辑:
DI 是a conecpt 首先由Martin Fowler 描述,OSGi is a module system for Java that implements a complete and dynamic component model 由OSGi Alliance 指定。
【讨论】:
它们在概念上是相关的,因为它们都提供了“关注点分离”机制。
OSGI 在模块级别上执行此操作 - 想想具有多个插件的 Eclipse 架构,每个插件负责特定的关注点/功能。
DI 面向对象级别 - 它提供了从连接在一起的多个对象构建应用程序的方法,每个对象负责其特定的功能。
在技术上它们是不同的。 OSGI 是一个有多种实现的规范。 DI 曾经是一种具有多种实现和 API 的设计模式。然而,JCP 最近有一些工作试图标准化 DI API (JSR 330)
【讨论】: