Osgi 如何基于配置绑定动态引用?

Osgi 如何基于配置绑定动态引用?,osgi,apache-felix,osgi-bundle,felix-dependency-manager,Osgi,Apache Felix,Osgi Bundle,Felix Dependency Manager,我有以下消费者组件,它使用名为sender的参考服务 @Component(configurationPolicy = ConfigurationPolicy.REQUIRE, configurationPid = DATA_SYNC_CONFIG) public class DataSynchronizer { @Reference private TelemetrySender sender; //calls some me

我有以下消费者组件,它使用名为
sender
的参考服务

    @Component(configurationPolicy = ConfigurationPolicy.REQUIRE, configurationPid = DATA_SYNC_CONFIG)
    public class DataSynchronizer {

        @Reference
        private TelemetrySender sender;

        //calls some methods of sender
}
只要接口
TelementrySender

但是,如果该接口有两个实现,并且如果我想根据配置属性选择要绑定的实现,那么正确的方法是什么?根据我的理解和发现,尝试了以下方法

包括一个绑定方法到我的组件,如下所示

   @Component(configurationPolicy = ConfigurationPolicy.REQUIRE, configurationPid = DATA_SYNC_CONFIG)
    public class DataSynchronizer {

        private TelemetrySender sender;

       @Reference
        void setSender(TelemetrySender telemetrySender ) {
            // read configuration and set only correct implementation 
           this.sender= telemetrySender ;
         }

        //calls some methods of sender
}
我的
遥测发送器
实现之一如下:

@Component(configurationPolicy = ConfigurationPolicy.REQUIRE, configurationPid = HTTP_TELEMETRY_SENDER_CONFIG,property={ "service=http" })
 public class HttpConnector implements TelemetrySender {
}

我的问题是如何选择正确的
telementrysender
内部
setSender
方法?或者如果我使用了错误的方法,请纠正我。我提到了

最简单的方法是在config
sender.target=
中使用属性。 看

因此,如果要绑定的服务具有sendername=my属性,则可以设置:

sender.target=(sendername=my)