【发布时间】:2025-12-21 02:15:12
【问题描述】:
当在服务中使用@Reference 来注入对多个服务(ReferenceCardinality.MULTIPLE)实现的引用时,OSGi 对注入服务的排序方式做出什么保证?他们总是按service.ranking 订购吗?
目前我执行以下操作:
@Reference(
service = SomeInterface.class,
cardinality = ReferenceCardinality.MULTIPLE,
policy = ReferencePolicy.DYNAMIC,
policyOption = ReferencePolicyOption.GREEDY,
fieldOption = FieldOption.UPDATE
)
private final List<SomeInterface> refs = new CopyOnWriteArrayList<>();
(注解是 OSGi R7 的注解)
在测试时,我总是看到列表 refs 上的元素按其 service.ranking 的降序排列,但我不知道这是设计使然还是偶然,以及 OSGi 是否保证。我在规范或任何博客文章中都没有找到明确的答案。
此外,当为 policy、policyOption 或 fieldOption 使用不同的值时,这是否成立?
【问题讨论】: