我正在读一本书(OSGi在实践中),并且有一部分关于服务的排名,它解释了所使用的规则:
首先要查看服务上的特殊 service.ranking 属性,可以在 代码为
Constants.SERVICE_RANKING
。该属性的值是一个整数 在Integer.MIN_VALUE
(即-2,147,483,648)和Integer.MAX_VALUE
之间 (2,147,483,647)。选择排名最高的服务 - 服务 没有显式排名属性的隐含值为零。如果 此规则产生平局,然后选择服务 ID 最低的服务。 第二条规则有些武断,但它往往导致“最古老” 选择服务,因为在大多数框架实现服务ID是 从递增计数器分配(虽然这种行为不是一部分 规范,不能依赖。)
为什么OSGi不强制执行服务 ID 的升序(按时间)?
为什么OSGi选择具有最低 ID 的服务,如果它们的排名相同?
答案 0 :(得分:3)
服务ID由框架在服务注册时分配。每个新id必须大于以前使用的所有id(在该框架启动周期内)。这是OSGi规范的强制要求。请参阅核心规范中的5.2.5节(所以我猜这本书的主题是错误的)。
因此,较低的服务ID表示比具有较高服务ID的服务更早注册的服务。因此,当排名相等时,选择较早的注册服务。