アノテーションインターフェース AliasFor
@AliasFor
は、アノテーション属性のエイリアスを宣言するために使用されるアノテーションです。使用シナリオ
- アノテーション内の明示的なエイリアス : 単一のアノテーション内で、
@AliasFor
を属性のペアで宣言して、それらが相互に交換可能なエイリアスであることを通知できます。 - メタアノテーションの属性の明示的なエイリアス :
@AliasFor
のannotation()
属性がそれを宣言するものとは異なるアノテーションに設定されている場合、attribute()
はメタアノテーションの属性のエイリアスとして解釈されます(つまり、明示的なメタアノテーション属性のオーバーライド)。これにより、アノテーション階層内でオーバーライドされる属性を正確に細かく制御できます。実際、@AliasFor
を使用すると、メタアノテーションのvalue
属性のエイリアスを宣言することもできます。 - アノテーション内の暗黙のエイリアス : アノテーション内の 1 つ以上の属性が同じメタアノテーション属性の属性オーバーライドとして(直接または推移的に)宣言されている場合、それらの属性は互いに暗黙のエイリアスのセットとして扱われ、明示的なものと同様の動作になります。アノテーション内のエイリアス。
使用要件
Java の任意のアノテーションと同様に、@AliasFor
が単独で存在するだけではエイリアスセマンティクスは適用されません。エイリアスセマンティクスを適用するには、MergedAnnotations
を介してアノテーションをロードする必要があります。
実装要件
- アノテーション内の明示的なエイリアス :
- エイリアスペアを構成する各属性には
@AliasFor
のアノテーションを付ける必要があり、attribute()
またはvalue()
のいずれかがペアのもう一方の属性を参照する必要があります。Spring Framework 5.2.1 以降、エイリアスペアの属性の 1 つだけにアノテーションを付けることが技術的に可能です。ただし、ドキュメントを改善し、Spring Framework の以前のバージョンとの互換性を保つために、エイリアスペアの両方の属性にアノテーションを付けることをお勧めします。 - エイリアス属性は、同じ戻り値の型を宣言する必要があります。
- エイリアス属性はデフォルト値を宣言する必要があります。
- エイリアス属性は、同じデフォルト値を宣言する必要があります。
annotation()
は宣言しないでください。
- エイリアスペアを構成する各属性には
- メタアノテーションの属性の明示的なエイリアス :
- メタアノテーションの属性のエイリアスである属性には
@AliasFor
でアノテーションを付ける必要があり、attribute()
はメタアノテーションの属性を参照する必要があります。 - エイリアス属性は、同じ戻り値の型を宣言する必要があります。
annotation()
はメタアノテーションを参照する必要があります。- 参照されるメタアノテーションは、
@AliasFor
を宣言するアノテーションクラスにメタ存在する必要があります。
- メタアノテーションの属性のエイリアスである属性には
- アノテーション内の暗黙のエイリアス :
- 暗黙のエイリアスのセットに属する各属性には
@AliasFor
でアノテーションを付ける必要があり、attribute()
は同じメタアノテーション内の同じ属性を参照する必要があります(アノテーション階層内の他の明示的なメタアノテーション属性オーバーライドを介して直接または推移的に)。 - エイリアス属性は、同じ戻り値の型を宣言する必要があります。
- エイリアス属性はデフォルト値を宣言する必要があります。
- エイリアス属性は、同じデフォルト値を宣言する必要があります。
annotation()
は適切なメタアノテーションを参照する必要があります。- 参照されるメタアノテーションは、
@AliasFor
を宣言するアノテーションクラスにメタ存在する必要があります。
- 暗黙のエイリアスのセットに属する各属性には
サンプル: アノテーション内の明示的なエイリアス
@ContextConfiguration
、value
、locations
には、相互の明示的なエイリアスがあります。
public @interface ContextConfiguration { @AliasFor("locations") String[] value() default {}; @AliasFor("value") String[] locations() default {}; // ... }
サンプル: メタアノテーションの属性の明示的なエイリアス
@XmlTestConfig
では、xmlFiles
は @ContextConfiguration
の locations
の明示的なエイリアスです。つまり、xmlFiles
は @ContextConfiguration
の locations
属性をオーバーライドします。
@ContextConfiguration public @interface XmlTestConfig { @AliasFor(annotation = ContextConfiguration.class, attribute = "locations") String[] xmlFiles(); }
サンプル: アノテーション内の暗黙のエイリアス
@MyTestConfig
、value
、groovyScripts
、xmlFiles
には、@ContextConfiguration
の locations
属性に対するすべての明示的なメタアノテーション属性のオーバーライドがあります。これら 3 つの属性は、相互の暗黙のエイリアスでもあります。
@ContextConfiguration public @interface MyTestConfig { @AliasFor(annotation = ContextConfiguration.class, attribute = "locations") String[] value() default {}; @AliasFor(annotation = ContextConfiguration.class, attribute = "locations") String[] groovyScripts() default {}; @AliasFor(annotation = ContextConfiguration.class, attribute = "locations") String[] xmlFiles() default {}; }
サンプル: アノテーション内の推移的な暗黙のエイリアス
@GroovyOrXmlTestConfig
では、groovy
は @MyTestConfig
の groovyScripts
属性の明示的なオーバーライドです。一方、xml
は、@ContextConfiguration
の locations
属性の明示的なオーバーライドです。さらに、groovy
と xml
は、どちらも @ContextConfiguration
の locations
属性を効果的にオーバーライドするため、相互に推移的な暗黙のエイリアスです。
@MyTestConfig public @interface GroovyOrXmlTestConfig { @AliasFor(annotation = MyTestConfig.class, attribute = "groovyScripts") String[] groovy() default {}; @AliasFor(annotation = ContextConfiguration.class, attribute = "locations") String[] xml() default {}; }
属性エイリアスをサポートする Spring アノテーション
Spring Framework 4.2 以降、コア Spring 内のいくつかのアノテーションが更新され、@AliasFor
を使用して内部属性のエイリアスを構成するようになりました。個々のアノテーションについては Javadoc を、詳細についてはリファレンスマニュアルを参照してください。
- 導入:
- 4.2
- 作成者:
- Sam Brannen
- 関連事項:
オプション要素のサマリー
修飾子と型オプションの要素説明ClassSE<? extends AnnotationSE>
エイリアス化されたattribute()
が宣言されているアノテーションの型。この属性がエイリアスである属性の名前。attribute()
のエイリアス。
要素の詳細
value
attribute()
のエイリアス。annotation()
が宣言されていない場合、attribute()
の代わりに使用することを意図しています。— 例:@AliasFor(attribute = "value")
の代わりに@AliasFor("value")
- デフォルト:
- ""
attribute
この属性がエイリアスである属性の名前。- 関連事項:
- デフォルト:
- ""
annotation
ClassSE<? extends AnnotationSE> annotationエイリアス化されたattribute()
が宣言されているアノテーションの型。デフォルトは
Annotation
SE で、エイリアス属性がこの属性と同じアノテーションで宣言されていることを意味します。- デフォルト:
- java.lang.annotation.Annotation.class