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环境以便可以从EclipseStarter类中使用它?