2016-08-29 4 views
0

サービス参照に@Referenceを使用したOSGiバンドルを開発しています。 Googleで検索しているうちに私はいくつかの例を見ることができます@Referencesクラス内のアノテーションもクラス内でのみバインド&すべてのサービス参照にバインド解除メソッドが使用されています。felix scrの@Referenceと@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クラスで同じです。

+0

'@ Reference'のようなJava型について言及するときは、完全なパッケージ名を表示することが重要です。さまざまなライブラリとパッケージには、多くの '@ Reference'アノテーション型があります。 –

答えて

1

Java 7では、repeating annotationを定義することはできません。したがって、コンテナ注釈を使用する必要があります。

@Referencesは1つのタイプに複数の@Referenceアノテーションを指定できるコンテナアノテーションです。パフォーマンスの差はありません。これらの注釈は実行時にはまったく処理されないため(コンパイル時に注釈プロセッサによってのみ)、これを実行することはできません。

+0

'@ References'は[Apache Felix SCR Annotations](http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html)からのものです文書化されていない)。 [OSGi宣言サービスの注釈](https://osgi.org/javadoc/r6/cmpn/org/osgi/service/component/annotations/package-summary.html)には、この宣言は含まれていません。 –

+0

ありがとうBalazs。バインドとアンバインドのメソッド名はどうでしょうか?私はコンテナ注釈で定義されたすべての注釈のバインドとアンバインドだけを見ることができます。ショーンはそれがどこに書かれているか言及しなかったので! – Shriram

+0

@Shiram:私はあなたの質問を理解するか分からない。参照コンテナ注釈にはバインド/バインド属性がありません。参照注釈があります。参照は、型の前に置かれているかのようにReferencesにリストされている場合、同じ方法で動作します。私はあなたがドキュメンテーションの代わりにjavadocをチェックすることをお勧めします:http://javadox.com/org.apache.felix/org.apache.felix.scr.annotations/1.9.8/org/apache/felix/scr/アノテーション/ package-summary.html –

関連する問題