Как связать динамическую ссылку на основе конфигурации? - PullRequest
2 голосов
/ 21 ноября 2019

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

...