编程语言
首页 > 编程语言> > java-使用@Reference批注在运行时动态选择服务实现?

java-使用@Reference批注在运行时动态选择服务实现?

作者:互联网

我有一个包含@Component的osgi实现包,该包将@Reference引用到服务实现中.

有多个捆绑包以不同的方式实现服务.没问题,osgi选择了一个(使用排名或类似方法).问题是开发人员(I)决定要使用哪种服务实现.

但是,是否可以在运行时(当捆绑包开始或在其他时间)指定@Reference注释应选择哪种服务实现?

我怀疑我可以使用ServiceTracker来做到这一点.

我刚发布后发现https://stackoverflow.com/a/5804265/7820234(策略模式),看起来很有希望,唯一的问题是我不知道可以使用哪些OperatorProvider服务.我可以实现“选择器服务”并实现ServiceTracker来管理OperatorProvider服务.

[edit2]另一种方法似乎是使用ConfigurationAdmin的https://stackoverflow.com/a/32813211/7820234,您似乎可以更改“ myService.target”.扩展或实现ConfigurationAdmin的此特定功能应该可以完成这项工作.

首选的方式是哪种,还是有更好的选择?

解决方法:

您可以尝试一个简单的解决方案.每个DS组件都可以附加到config admin pid.使用此配置,您可以覆盖@Reference的服务过滤器.

例如,如果您有@Reference myService;那么您可以设置配置属性“ myService.target =(color = blue).

然后,这将限制对服务属性为color = blue的服务的引用.

标签:osgi,apache-felix,java
来源: https://codeday.me/bug/20191026/1933365.html