Как привязать динамическую ссылку на основе конфигурации?
У меня есть следующий потребительский компонент, который использует справочную службу под названием 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
метод? Или, если я использую неправильный подход, поправьте меня. Я сослался на эту статью
1 ответ
Самый простой способ - использовать атрибут в конфиге sender.target=<search filter>
. См. Сборник OSGi 112.6.2.1.
Итак, если служба, которую вы хотите привязать, имеет свойство sendername=my, вы можете установить:
sender.target=(sendername=my)