アノテーションインターフェース AliasFor


@AliasFor は、アノテーション属性のエイリアスを宣言するために使用されるアノテーションです。

使用シナリオ

  • アノテーション内の明示的なエイリアス : 単一のアノテーション内で、@AliasFor を属性のペアで宣言して、それらが相互に交換可能なエイリアスであることを通知できます。
  • メタアノテーションの属性の明示的なエイリアス @AliasFor の annotation() 属性がそれを宣言するものとは異なるアノテーションに設定されている場合、attribute() はメタアノテーションの属性のエイリアスとして解釈されます(つまり、明示的なメタアノテーション属性のオーバーライド)。これにより、アノテーション階層内でオーバーライドされる属性を正確に細かく制御できます。実際、@AliasFor を使用すると、メタアノテーションの value 属性のエイリアスを宣言することもできます。
  • アノテーション内の暗黙のエイリアス : アノテーション内の 1 つ以上の属性が同じメタアノテーション属性の属性オーバーライドとして(直接または推移的に)宣言されている場合、それらの属性は互いに暗黙のエイリアスのセットとして扱われ、明示的なものと同様の動作になります。アノテーション内のエイリアス。

使用要件

Java の任意のアノテーションと同様に、@AliasFor が単独で存在するだけではエイリアスセマンティクスは適用されません。エイリアスセマンティクスを適用するには、MergedAnnotations を介してアノテーションをロードする必要があります。

実装要件

  • アノテーション内の明示的なエイリアス :
    1. エイリアスペアを構成する各属性には @AliasFor のアノテーションを付ける必要があり、attribute() または value() のいずれかがペアのもう一方の属性を参照する必要があります。Spring Framework 5.2.1 以降、エイリアスペアの属性の 1 つだけにアノテーションを付けることが技術的に可能です。ただし、ドキュメントを改善し、Spring Framework の以前のバージョンとの互換性を保つために、エイリアスペアの両方の属性にアノテーションを付けることをお勧めします。
    2. エイリアス属性は、同じ戻り値の型を宣言する必要があります。
    3. エイリアス属性はデフォルト値を宣言する必要があります。
    4. エイリアス属性は、同じデフォルト値を宣言する必要があります。
    5. annotation() は宣言しないでください。
  • メタアノテーションの属性の明示的なエイリアス :
    1. メタアノテーションの属性のエイリアスである属性には @AliasFor でアノテーションを付ける必要があり、attribute() はメタアノテーションの属性を参照する必要があります。
    2. エイリアス属性は、同じ戻り値の型を宣言する必要があります。
    3. annotation() はメタアノテーションを参照する必要があります。
    4. 参照されるメタアノテーションは、@AliasFor を宣言するアノテーションクラスにメタ存在する必要があります。
  • アノテーション内の暗黙のエイリアス :
    1. 暗黙のエイリアスのセットに属する各属性には @AliasFor でアノテーションを付ける必要があり、attribute() は同じメタアノテーション内の同じ属性を参照する必要があります(アノテーション階層内の他の明示的なメタアノテーション属性オーバーライドを介して直接または推移的に)。
    2. エイリアス属性は、同じ戻り値の型を宣言する必要があります。
    3. エイリアス属性はデフォルト値を宣言する必要があります。
    4. エイリアス属性は、同じデフォルト値を宣言する必要があります。
    5. annotation() は適切なメタアノテーションを参照する必要があります。
    6. 参照されるメタアノテーションは、@AliasFor を宣言するアノテーションクラスにメタ存在する必要があります。

サンプル: アノテーション内の明示的なエイリアス

@ContextConfigurationvaluelocations には、相互の明示的なエイリアスがあります。

 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();
 }

サンプル: アノテーション内の暗黙のエイリアス

@MyTestConfigvaluegroovyScriptsxmlFiles には、@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
関連事項:
  • 要素の詳細

    • value

      @AliasFor("attribute") StringSE value
      attribute() のエイリアス。

      annotation() が宣言されていない場合、attribute() の代わりに使用することを意図しています。— 例: @AliasFor(attribute = "value") の代わりに @AliasFor("value") 

      デフォルト:
      ""
    • attribute

      @AliasFor("value") StringSE attribute
      この属性がエイリアスである属性の名前。
      関連事項:
      デフォルト:
      ""
    • annotation

      ClassSE<? extends AnnotationSE> annotation
      エイリアス化された attribute() が宣言されているアノテーションの型。

      デフォルトは AnnotationSE で、エイリアス属性がこの属性と同じアノテーションで宣言されていることを意味します。

      デフォルト:
      java.lang.annotation.Annotation.class