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

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

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

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

【问题讨论】:

    标签: java dependency-injection osgi apache-felix


    【解决方案1】:

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

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

    【讨论】:

    • Peaberry (code.google.com/p/peaberry) 是 Guice 的改编版,可与 OSGi 一起使用。
    • DS 非常适合这个。 “如果一个组件提供了您想在另一个组件中使用的功能,我认为它应该使用服务公开” - 完全正确。如果您想要的是“inner-bundle-dependency-injecttion”,您可能希望使用私有实现类(而不是公共接口)设置组件作为提供的服务,并从您的捆绑包中的另一个组件中引用该服务。这样,服务就在全局服务注册表中,但没有其他捆绑包可以使用它,因为它无法加载类。
    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 2018-05-18
    • 2018-04-27
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    相关资源
    最近更新 更多