OSGi 的新 R4.2 规范描述了蓝图服务,用于依赖注入和服务连接。
Blueprint 是否取代了声明式服务(这仍然是规范的一部分),或者它们是否打算一起工作?
蓝图是否已经可用于流行的实现(Felix 和 Equinox)?
OSGi 的新 R4.2 规范描述了蓝图服务,用于依赖注入和服务连接。
Blueprint 是否取代了声明式服务(这仍然是规范的一部分),或者它们是否打算一起工作?
蓝图是否已经可用于流行的实现(Felix 和 Equinox)?
我问了自己同样的问题,并且在与其他参与该主题的人讨论这个问题时,主旨是尽管两者在某种程度上重叠,但何时使用的用例却大不相同。DS 是一种轻量级的解决方案,可以以声明方式避免激活器和模型服务依赖关系。BP 基本上是针对企业部署的 DI 容器。对于不太熟悉 OSGi 的动态特性的“常规”Java 开发人员(隐藏在代理后面很多)来说,这种情况也更为常见。
实施方面,有两个项目正在开发中(它们都与容器无关且未正式发布)。Spring DM 2.0 将提供一个实现(2.0.0.M1 已经包含一个工作实现)以及 Apache 作为其 geronimo 项目(幻灯片)的一部分。
根据我在基于 Felix 的环境中的经验,DS 是唯一一个足够成熟的依赖注入器,它与 OSGi Compendium 规范的其他部分(如 ConfigAdmin)保持一致。
蓝图在我看来是 OSGi 规范中包含 Spring DM 的政治内容。
iPojo 是基于 Java 注释而不是 XML 描述符的替代方案,它隐藏了 OSGi 基础的某些部分。
如果您以前使用过 Spring,那么蓝图服务使用起来会更加熟悉。声明式服务没有那么强大,但在 OSGi 容器中被广泛采用。
另一个问题是蓝图服务——据我所知——都存在于一个容器中,即蓝图容器——而声明性服务在引用它们的包中可用。特别是使用 Equinox,这会导致不同的行为。当您想要遵守 Equinox 提倡的严格的类加载方法时,应该在蓝图上使用 DS。