【问题标题】:difference between @Reference & @References annotation in felix scrfelix scr 中@Reference 和@References 注释的区别
【发布时间】:2016-08-29 16:35:47
【问题描述】:

我正在开发一个 OSGi 包,它使用 @Reference 作为服务参考。在 Google 中搜索时,我可以看到一些在类级别使用 @References 注释的示例,并且在类内部也只有绑定和取消绑定方法用于所有服务引用。

@References(
   @Reference(cardinality= ReferenceCardinality.MANDATORY_MULTIPLE, referenceInterface = TestInterface1.class,policy = ReferencePolicy.DYNAMIC)
   @Reference(cardinality= ReferenceCardinality.MANDATORY_MULTIPLE, referenceInterface = TestInterface2.class,policy = ReferencePolicy.DYNAMIC))
class TestComponent {
..
public void bind(TestInterface1 interface)
{}
public void unbind(TestInterface1 interface){}

public void bind(TestInterface2 interface)
{}
public void unbind(TestInterface2 interface){}

}

@Reference 和 @References 有什么区别?是否有使用@References 的任何性能度量/推荐度量?由于所有引用类的绑定和取消绑定方法名称都相同。

【问题讨论】:

  • 当谈到像@Reference 这样的Java 类型时,显示完整的包名很重要。在不同的库和包中有很多@Reference注解类型。

标签: java osgi apache-karaf osgi-bundle


【解决方案1】:

在 Java 7 中,无法定义 repeating annotation。因此,必须使用容器注解。

@References 是一个容器注解,允许您在一种类型上指定多个@Reference 注解。它没有任何性能差异。它不可能有,因为这些注解在运行时根本不被处理(仅在编译时由注解处理器处理)。

【讨论】:

  • 值得一提的是@References 来自Apache Felix SCR Annotations(虽然没有记录)。 OSGi Declaration Services annotations 不包括它。
  • 谢谢巴拉兹。 bind 和 unbind 的方法名呢?因为我只能看到容器注释中定义的所有注释的绑定和取消绑定。正如肖恩提到的,没有记录在哪里!
  • @Shiram:我不确定我是否理解你的问题。 References 容器注释没有绑定/取消绑定属性。参考注释有。如果引用列在引用中,则引用的工作方式与将其放在类型前面一样。我建议您应该检查 javadoc 而不是文档:javadox.com/org.apache.felix/org.apache.felix.scr.annotations/…
猜你喜欢
  • 2017-07-29
  • 2015-08-07
  • 2011-10-15
  • 2016-10-23
  • 2018-04-27
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
相关资源
最近更新 更多