【问题标题】:Apache Felix SCR @Reference cheatsheetApache Felix SCR @Reference 备忘单
【发布时间】:2015-08-07 05:27:48
【问题描述】:

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

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

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

【问题讨论】:

    标签: java apache-felix declarative-services


    【解决方案1】:

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

    参考基数

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

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

    策略

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

    政策

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

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

    政策选项

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

    其他 felix 特定资源

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

    【讨论】:

    • 请不要发布仅链接的答案。
    猜你喜欢
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2011-10-15
    • 2021-07-14
    • 2018-05-18
    • 2019-01-27
    • 1970-01-01
    相关资源
    最近更新 更多