我刚刚开始使用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。