我有一个场景,我需要在 OSGi 应用程序的多个包中将相同的对象公开为声明性服务。更具体地说,有一个作为声明服务 (Service1) 公开的类。有几个服务消费者。我正在使用 maven-scr-plugin 生成 SCR 描述符。服务消费者有这样的对 Service 接口的引用。
@Reference(name = "Service1",bind = "bindService1",
unbind = "unbindService1", policy = ReferencePolicy.STATIC)
ServiceInterface1 service1;
protected void bindService1(ServiceInterface1 service1) {
this.service1 = service1;
}
protected void unbindService1(ServiceInterface1 service1) {
this.service1 = null;
}
这个服务提供者(Service1)是另一个服务(Service2)的服务消费者。所以 Service1 也会有对 Service2 的引用。
@Service
@Component(immediate = true, name = "Service1")
public class Service1 implements ServiceInterface1{
@Reference(name = "Service2",bind = "bindService2",
unbind = "unbindService2", policy = ReferencePolicy.STATIC)
ServiceInterface2 service2;
protected void bindService2(ServiceInterface2 service2) {
this.service2 = service2;
}
protected void unbindService2(ServiceInterface2 service2) {
this.service2 = null;
}
}
这就是我的 Service2 的样子
@Service
@Component(immediate = true, name = "Service2")
public class Service2 implements ServiceInterface2 {
.....
}
我遇到的问题是,我可以看到 OSGi 容器调用了 Service1 和服务使用者的绑定方法,但是绑定到服务使用者中的引用 service1 的对象没有初始化其 service2 引用。这意味着当我使用来自服务使用者的 service1 对象时,我会收到空指针异常,因为 service1 对象中没有 service2 对象。绑定到 service1 的对象与 OSGi 容器用来绑定引用 service2 的对象不同。我希望所有服务消费者都使用相同的对象。这可以解决吗?