Felix/OSGi:如何使用不是 OSGi 服务的 SCR 组件?

Posted

技术标签:

【中文标题】Felix/OSGi:如何使用不是 OSGi 服务的 SCR 组件?【英文标题】:Felix/OSGi: How to use SCR components that are not OSGi services? 【发布时间】:2010-10-02 01:16:14 【问题描述】:

Apache Felix 的 SCR 允许声明(通过注释或 XML)组件,然后将其实例化、连接到它们的依赖项并注册为 OSGi 服务。

也可以跳过服务注册部分,只让 SCR 创建组件(通过指定 @scr.component,但省略 @scr.service) .我在想这可能仅对依赖注入(在包中)有用,但是如何使用组件?可以使用 scr.reference 注入服务,但这不适用于非服务(或者它)?

直接访问 SCR API 有效,但直接与容器服务对话有点违背 DI 的目的。

【问题讨论】:

【参考方案1】:

我认为你只能注入 OSGI 服务。如果你想使用依赖注入,也许你应该检查 google Guice。不幸的是,我不知道它是否可以在 OSGI 容器中开箱即用。

关于 SCR 组件,如果一个组件提供了你想在另一个组件中使用的功能,我认为它应该使用服务公开。

【讨论】:

Peaberry (code.google.com/p/peaberry) 是 Guice 的改编版,可与 OSGi 一起使用。 DS 非常适合这个。 “如果一个组件提供了您想在另一个组件中使用的功能,我认为它应该使用服务公开” - 完全正确。如果您想要的是“内部捆绑依赖注入”,您可能希望使用私有实现类(而不是公共接口)设置组件作为提供的服务,并从捆绑中的另一个组件中引用该服务。这样,服务就在全局服务注册表中,但没有其他捆绑包可以使用它,因为它无法加载类。

以上是关于Felix/OSGi:如何使用不是 OSGi 服务的 SCR 组件?的主要内容,如果未能解决你的问题,请参考以下文章

在 Apache Felix OSGI 中安装和运行 Web 管理控制台

如何管理 OSGi 构建依赖项?

如何配置OSGi环境以便可以从EclipseStarter类中使用它?

OSGi 包中的 Websphere 8.5 + CXF。是不是可以?

如何从 Web 应用程序使用 OSGi 服务?

如何在 OSGi 中使用 servlet