【发布时间】:2023-03-09 04:35:03
【问题描述】:
我有一个 osgi 实现包,其中包含一个 @Component,它获取一个服务实现的 @Reference。
有多个捆绑包以不同的方式实现服务。没问题 osgi 选择一个(使用排名或类似的东西)。问题在于开发人员(我)决定使用哪个服务实现。
但是是否有可能在运行时(当包启动时或在其他时间)以某种方式指定@Reference 注释应该选择哪个服务实现?
我怀疑我可以使用 ServiceTracker 来执行此操作。
[编辑] 在我发布后我发现https://stackoverflow.com/a/5804265/7820234(策略模式),看起来很有希望,唯一的问题是我不知道哪些 OperatorProvider 服务可用。我可以实现“选择器服务”并实现一个 ServiceTracker 来管理 OperatorProvider 服务。
[edit2] 另一种方法似乎是 https://stackoverflow.com/a/32813211/7820234 与 ConfigurationAdmin 您似乎能够更改“myService.target”。扩展或实现 ConfigurationAdmin 的这一特定功能应该可以完成这项工作。
哪个是首选方式,或者有更好的选择?
【问题讨论】:
标签: java osgi apache-felix