Apache Felix SCR @Reference cheatsheet

时间:2015-05-25 17:31:01

标签: java apache-felix declarative-services

我在我的应用程序中使用Apache Felix声明性服务,我正在寻找一个描述可以给@Reference注释的参数的备忘单。我看过一个网页,其中包含一个非常丰富的备忘单(或表格),但我似乎无法找到它。我认为这对很多Felix用户来说都很有用。我正在谈论的参数:

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

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

1 个答案:

答案 0 :(得分:9)

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

参考基数

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

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

<强>策略

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

<强>政策

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

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

政策选项

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

其他felix特定资源

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