【问题标题】:osgi dependency injection between services服务之间的osgi依赖注入
【发布时间】:2014-01-25 16:59:44
【问题描述】:

我刚开始使用 OSGi 服务并遇到以下情况。我有一个包含 2 项服务的项目。服务 A 需要服务 B,所以我尝试使用

注入依赖服务
@Inject
private ServiceB svc;

但框架不会注入。如果我在服务 A 中设置以下两种方法 并将这些方法设置为框架调用的我的 OSGi componentA.xml 中的“绑定/取消绑定” 这些方法,我可以在服务 A 中使用服务 B。

public synchronized void bind(IServiceB service)
{
  this.svc = service;
}

public synchronized void unbind(IServiceB service)
{
  if (this.svc == service)
  {
    this.svc = null;
  }
}

问题是,为什么它不适用于 @Inject ?抱歉,如果这是一个愚蠢的问题,我对整个话题都很陌生。非常感谢!

【问题讨论】:

    标签: service osgi code-injection between


    【解决方案1】:

    您使用的似乎是声明式服务,它不支持字段注入或 JSR-330 注释。字段注入在 OSGi 中的效用有限,服务可能随时被注入或“未注入”。方法注入更普遍有用,因为它让您有机会在发生这种情况时做某事。

    但是,我强烈建议您使用声明式服务的注释。这将使您不必手动编写 component.xml。

    【讨论】:

    • 尼尔您好,感谢您的回答。我没有提到它,但你当然是对的,我正在使用 DS。您能否进一步解释一下“DS 的注释”是什么意思?到目前为止,我所做的是生成一个 component.xml 并使用 eclipse 编辑器设置所需的信息(就像清单编辑器一样,只需单击几下即可设置服务接口和实现类)。非常感谢!
    • 所以再次猜测表明您使用的是 Eclipse PDE(插件开发环境)?哎哟哎哟。这会给你带来很多痛苦。在 PDE 中,您基本上无法生成 anything 并且必须手动完成所有操作。看看 bndtools 教程 (bndtools.org/tutorial.html),它应该对注释有一个具体的想法,以及一个合适的工具如何让你的生活更轻松。
    • 我使用的是 Eclipse JEE 版,没错。感谢 bndtools 的提示,我会进一步调查!起初我认为这些注释是 OSGi “开箱即用”的。我认为这个问题已经足够清楚了,再次感谢您!
    • 太棒了。顺便说一句,假设您使用的是 Eclipse 3.7 或更高版本,Bndtools 可以毫无问题地安装到 Eclipse JEE 版本中。
    • 有一些工具可以在 PDE 环境中处理注解,例如 wuetherich.com 中的那个,但也有缺点(例如需要在清单中导入注解包)。如果您刚开始使用 OSGi/eClipse 和 DS,您可能最好从 bndtools 开始。
    猜你喜欢
    • 2018-06-19
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多