2

我有以下使用参考服务的消费者组件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
}

我的TelemetrySender实现之一如下,

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

我的问题是如何选择正确的TelemntrySender内部setSender方法?或者,如果我使用了错误的方法,请纠正我。我参考了这篇文章

4

1 回答 1

2

最简单的方法是在 config 中使用属性sender.target=<search filter>。请参阅OSGi 纲要 112.6.2.1

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

sender.target=(sendername=my)
于 2019-11-21T05:51:06.150 回答