我有以下使用参考服务的使用者组件,称为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
?或者,如果我使用错误的方法,请纠正我。我提到了this article
我有以下使用称为发送方的参考服务的使用者组件,@Component(configurationPolicy = ConfigurationPolicy.REQUIRE,configurationPid = DATA_SYNC_CONFIG)public ...
最简单的方法是在配置sender.target=<search filter>
中使用属性。参见OSGi compendium 112.6.2.1。