У меня есть следующий потребительский компонент, который использует справочную службу под названием 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
метод? Или, если я использую неправильный подход, поправьте меня. Я упомянул эту статью