有没有办法轻松跟踪多个 OSGi 服务?

Is there a way to easily track multiple OSGi services?

我正在寻找无需创建许多 ServiceTracker 的麻烦即可跟踪多个 OSGI 服务的方法。

类似的东西:

library.track(Service1.class, Service2.class, Service3.class, new Tracker(){
    void servicesAdded(Service1 s1, Service2 s2, Service3 s3){
        //do something with all 3 services
    }
    void servicesRemoved(){
        //one of the services is not available, no operation possible
    }
});

您不能仅使用基本的 OSGi API 跟踪一项以上的服务。实现这一点的最简单方法是创建一个声明性服务组件,其中包含一些强制性服务引用和 immediate=true。当所有强制引用都存在时,将调用此服务的@Activate 方法。

@Component(immediate=true)
public class MyComponent {
    @Reference
    ServiceA sa;

    @Reference
    ServiceB sb;

    @Reference
    ServiceC sc;

    @Activate
    public void activate() {

    }

}