10

我在我的应用程序中使用 Apache Felix 声明式服务,并且我正在寻找一份备忘单,其中描述了可以提供给@Reference注释的参数。我曾经看到一个网页,其中包含一个非常有用的备忘单(或表格),但我似乎找不到它。我认为这对很多 Felix 用户来说很有用。我说的参数:

  • 基数MANDATORY_UNARY, MANDATORY_MULTIPLE, OPTIONAL_UNARY, OPTIONAL_MULTIPLE
  • 策略EVENT, LOOKUP
  • 政策DYNAMIC, STATIC
  • 政策选项GREEDY, RELUCTANT

基数相当简单,但其他人对我来说并不清楚。他们做什么以及如何工作?

4

1 回答 1

10

来自官方OSGI R5 Compendium Spec第 281 页。

参考基数

引用的基数可以指定为以下四种选择之一:

  • 0..1 – 可选且一元。
  • 1..1 – 强制和一元(默认)。
  • 0..n - 可选和多个。
  • 1..n – 强制和多个。

战略

  • 事件策略——当服务绑定、服务未绑定或更新其属性时,SCR 调用组件实例上的方法。这些方法是引用指定的绑定、更新和取消绑定方法。如果需要通知组件绑定服务的更改以进行动态引用,则事件策略很有用。
  • 查找策略– 组件实例可以使用 ComponentContext 的任一 locateService 方法来定位绑定服务。这些方法将引用的名称作为参数。如果引用具有动态策略,重要的是不要存储返回的服务对象,而是在每次需要时查找它。

政策

  • 静态策略是最简单的策略,是默认策略。组件实例永远不会看到任何动态。在具有静态策略的引用的任何绑定服务变得不可用之前,组件配置被停用。如果有目标服务可以替换掉不可用的绑定服务,则必须重新激活组件配置并绑定到替换服务。

  • 动态策略稍微复杂一些,因为组件实现必须正确处理可能在任何线程上发生的绑定服务集的更改。使用动态策略,SCR 可以更改绑定服务集,而无需停用组件配置。如果组件使用事件策略访问服务,那么组件实例将通过调用 bind 和 unbind 方法被通知绑定服务集合的变化。

政策选项

  • 不情愿- 尽量减少重新绑定和重新激活。
  • greedy – 通过停用静态引用或重新绑定动态引用来最大限度地使用最佳服务。

其他 felix 特定资源

[Felic SCR 注释] ( http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html )

于 2015-05-26T09:01:14.817 回答