我有以下消费者组件,它使用名为sender
的引用服务,
@Component(configurationPolicy = ConfigurationPolicy.REQUIRE, configurationPid = DATA_SYNC_CONFIG)
public class DataSynchronizer {
@Reference
private TelemetrySender sender;
//calls some methods of sender
}
只要有一个接口(interface) TelementrySender
但是,如果该接口(interface)有两个实现,并且如果我想根据配置属性选择要绑定(bind)的实现,那么正确的方法是什么?根据我的理解和发现,尝试了以下方法。
在我的组件中包含了一个绑定(bind)方法,如下所示。
@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 {
}
我的问题是如何在 setSender
方法中选择正确的 TelemntrySender
?或者,如果我使用了错误的方法,请纠正我。我提到this article
最佳答案
最简单的方法是在配置中使用属性sender.target=<search filter>
。
请参阅OSGi compendium 112.6.2.1 .
因此,如果您要绑定(bind)的服务具有属性 sendername=my 那么您可以设置:
sender.target=(sendername=my)
关于osgi - 如何根据配置绑定(bind)动态引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58966268/