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
方法?或者如果我使用了错误的方法,请纠正我。我提到了最简单的方法是在configsender.target=
中使用属性。
看
因此,如果要绑定的服务具有sendername=my属性,则可以设置:
sender.target=(sendername=my)