Как привязать динамическую ссылку на основе конфигурации?

У меня есть следующий потребительский компонент, который использует справочную службу под названием 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)
Другие вопросы по тегам