Apache Felix SCR @Reference 速查表

Apache Felix SCR @Reference cheatsheet

我在我的应用程序中使用 Apache Felix 声明式服务,我正在寻找一个作弊 sheet,它描述了可以给 @Reference 注释的参数。我曾经看到一个网页,其中包含关于它的非常有用的作弊 sheet(或 table),但我似乎找不到它。我认为这对很多 Felix 用户都有用。我说的参数:

cardinality 相当简单,但其他的我不清楚。他们做什么以及如何工作?

来自官方 OSGI R5 Compendium Spec 页 281ff.

参考基数

引用的基数可以指定为四个选项之一:

  • 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)