如何基于配置绑定动态引用?

问题描述 投票:0回答:1

我有以下使用参考服务的使用者组件,称为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?或者,如果我使用错误的方法,请纠正我。我提到了this article

我有以下使用称为发送方的参考服务的使用者组件,@Component(configurationPolicy = ConfigurationPolicy.REQUIRE,configurationPid = DATA_SYNC_CONFIG)public ...

osgi apache-felix osgi-bundle felix-dependency-manager
1个回答
0
投票

最简单的方法是在配置sender.target=<search filter>中使用属性。参见OSGi compendium 112.6.2.1

© www.soinside.com 2019 - 2024. All rights reserved.