服务之间的OSGI依赖注入



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

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

但是框架不会注入。如果我在服务中设置以下两种方法并将这些方法设置为我的osgi componenta.xml框架调用中的" bind/undbind"这些方法和我可以在服务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?抱歉,如果这是一个愚蠢的问题,我对整个主题的新手很新。非常感谢!

看起来您正在使用声明服务,而声明服务不支持现场注入或JSR-330注释。现场注入在OSGI中的实用程序有限,在任何时候可以将服务注入>或"未注射" 。方法注射更普遍有用,因为它使您有机会在发生这种情况时做某事。

但是,我确实敦促您将注释用于声明性服务。这将使您不必手动编写component.xml。

最新更新