Service 服务之间的osgi依赖注入

Service 服务之间的osgi依赖注入,service,osgi,code-injection,between,Service,Osgi,Code Injection,Between,我刚开始使用OSGi服务,出现了以下情况。我有一个项目,其中包含2个服务。服务A需要服务B,所以我尝试使用 @Inject private ServiceB svc; 但该框架不会注入任何信息。如果我在服务A中设置以下两种方法 并在框架调用的OSGi componentA.xml中将这些方法设置为“bind/undbind” 这些方法和我可以在服务A中使用服务B public synchronized void bind(IServiceB service) { this.svc = se

我刚开始使用OSGi服务,出现了以下情况。我有一个项目,其中包含2个服务。服务A需要服务B,所以我尝试使用

@Inject
private ServiceB svc;
但该框架不会注入任何信息。如果我在服务A中设置以下两种方法 并在框架调用的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中的作用有限,在OSGi中,服务可以随时注入或“未注入”。方法注入通常更有用,因为它为您提供了在发生这种情况时执行某些操作的机会


但是,我强烈建议您将注释用于声明性服务。这将避免您手工编写component.xml。

Hello Neil,谢谢您的回答。我没有提到,但你当然是对的,我用的是DS。你能进一步解释一下“DS注释”的含义吗?到目前为止,我所做的是使用eclipse编辑器生成一个component.xml并设置所需的信息(就像清单编辑器一样,只需单击几下即可将服务接口设置为实现类)。非常感谢!所以,一些猜测再次表明您正在使用EclipsePDE(插件开发环境)?哎哟哎哟。这会给你带来很多痛苦。在PDE中,您基本上无法生成任何内容,只能手工完成。看一看bndtools教程(),它应该给出关于注释的具体想法,以及一个合适的工具如何使您的生活更轻松。感谢bndtools的提示,我将进一步调查!起初我认为这些注释是OSGi“开箱即用”的。我认为这个问题已经说得很清楚了,再次感谢你!伟大的顺便说一句,假设您使用的是Eclipse3.7或更高版本,那么Bndtools可以毫无问题地安装到EclipseJeeEdition中。在PDE环境中有一些处理注释的工具,如在,但也有一些缺点(如需要在清单中导入注释包)。如果您刚刚开始使用OSGi/eClipse和DS,那么最好从bndtools开始。