インターフェース MergedAnnotations

すべてのスーパーインターフェース:
IterableSE<MergedAnnotation<AnnotationSE>>

public interface MergedAnnotations extends IterableSE<MergedAnnotation<AnnotationSE>>
通常、ClassSEMethodSE などのソースから取得した、マージされたアノテーションのコレクションへのアクセスを提供します。

マージされた各アノテーションは、さまざまなソース値から属性値を「マージ」できるビューを表します。通常は次のとおりです。

  • アノテーション内の 1 つ以上の属性に対する明示的および暗黙的な @AliasFor 宣言
  • メタアノテーションの明示的な @AliasFor 宣言
  • メタアノテーションの規約ベースの属性エイリアス
  • メタアノテーション宣言から

例: @PostMapping アノテーションは次のように定義されます:

 @Retention(RetentionPolicy.RUNTIME)
 @RequestMapping(method = RequestMethod.POST)
 public @interface PostMapping {

     @AliasFor(attribute = "path")
     String[] value() default {};

     @AliasFor(attribute = "value")
     String[] path() default {};
 }
 

メソッドに @PostMapping("/home") でアノテーションが付けられている場合、そのメソッドには @PostMapping とメタアノテーション @RequestMapping の両方のマージされたアノテーションが含まれます。@RequestMapping アノテーションのマージされたビューには、次の属性が含まれます。

名前 ソース
value"/home"@PostMapping で宣言
path"/home" 明示的な @AliasFor
メソッド RequestMethod.POST メタアノテーションで宣言

MergedAnnotations は、任意の Java AnnotatedElementSE から取得できます。また、リフレクションを使用しないソース(バイトコードを直接解析するソースなど)にも使用できます。

さまざまな検索戦略を使用して、集約するアノテーションを含む関連するソース要素を見つけることができます。例: 次のコードは、MergedAnnotations.SearchStrategy.TYPE_HIERARCHY を使用して、MyClass だけでなく、スーパークラスおよび実装されたインターフェースでアノテーションを検索します。

 MergedAnnotations mergedAnnotations =
     MergedAnnotations.search(TYPE_HIERARCHY).from(MyClass.class);
 

MergedAnnotations インスタンスから、単一のアノテーションを取得するか、すべてのアノテーションまたは特定の型に一致するアノテーションのみをストリーミングすることができます。アノテーションが存在するかどうかもすばやくわかります。

ここにいくつかの典型的な例があります:

 // is an annotation present or meta-present?
 mergedAnnotations.isPresent(ExampleAnnotation.class);

 // get the merged "value" attribute of ExampleAnnotation (either directly or
 // meta-present)
 mergedAnnotations.get(ExampleAnnotation.class).getString("value");

 // get all meta-annotations but no directly present annotations
 mergedAnnotations.stream().filter(MergedAnnotation::isMetaPresent);

 // get all ExampleAnnotation declarations (including any meta-annotations) and
 // print the merged "value" attributes
 mergedAnnotations.stream(ExampleAnnotation.class)
     .map(mergedAnnotation -> mergedAnnotation.getString("value"))
     .forEach(System.out::println);
 

注: MergedAnnotations API とその基礎となるモデルは、Spring の共通コンポーネントモデルの構成可能なアノテーション用に設計されており、属性のエイリアスとメタアノテーションの関連に重点が置かれています。この API でプレーン Java アノテーションを取得するためのサポートはありません。簡単なアノテーション検索のために、標準の Java リフレクションまたは Spring の AnnotationUtils を使用してください。

導入:
5.2
作成者:
Phillip Webb, Sam Brannen
関連事項:
  • メソッドの詳細

    • isPresent

      <A extends AnnotationSE> boolean isPresent(ClassSE<A> annotationType)
      指定されたアノテーション型が直接存在するかメタ存在であるかを判別します。

      get(annotationType).isPresent() を呼び出すのと同じです。

      パラメーター:
      annotationType - チェックするアノテーション型
      戻り値:
      アノテーションが存在する場合は true 
    • isPresent

      boolean isPresent(StringSE annotationType)
      指定されたアノテーション型が直接存在するかメタ存在であるかを判別します。

      get(annotationType).isPresent() を呼び出すのと同じです。

      パラメーター:
      annotationType - チェックするアノテーション型の完全修飾クラス名
      戻り値:
      アノテーションが存在する場合は true 
    • isDirectlyPresent

      <A extends AnnotationSE> boolean isDirectlyPresent(ClassSE<A> annotationType)
      指定されたアノテーション型が直接存在するかどうかを判別します。

      get(annotationType).isDirectlyPresent() を呼び出すのと同じです。

      パラメーター:
      annotationType - チェックするアノテーション型
      戻り値:
      アノテーションが直接存在する場合は true 
    • isDirectlyPresent

      boolean isDirectlyPresent(StringSE annotationType)
      指定されたアノテーション型が直接存在するかどうかを判別します。

      get(annotationType).isDirectlyPresent() を呼び出すのと同じです。

      パラメーター:
      annotationType - チェックするアノテーション型の完全修飾クラス名
      戻り値:
      アノテーションが直接存在する場合は true 
    • get

      <A extends AnnotationSE> MergedAnnotation<A> get(ClassSE<A> annotationType)
      指定された型の最も近い一致するアノテーションまたはメタアノテーションを取得します。存在しない場合は MergedAnnotation.missing() を取得します。
      パラメーター:
      annotationType - 取得するアノテーション型
      戻り値:
      MergedAnnotation インスタンス
    • get

      <A extends AnnotationSE> MergedAnnotation<A> get(ClassSE<A> annotationType, @Nullable PredicateSE<? super MergedAnnotation<A>> predicate)
      指定された型の最も近い一致するアノテーションまたはメタアノテーションを取得します。存在しない場合は MergedAnnotation.missing() を取得します。
      パラメーター:
      annotationType - 取得するアノテーション型
      predicate - 一致する必要がある述語、または型の一致のみが必要な場合は null 
      戻り値:
      MergedAnnotation インスタンス
      関連事項:
    • get

      <A extends AnnotationSE> MergedAnnotation<A> get(ClassSE<A> annotationType, @Nullable PredicateSE<? super MergedAnnotation<A>> predicate, @Nullable MergedAnnotationSelector<A> selector)
      指定した型の一致するアノテーションまたはメタアノテーションを取得します。存在しない場合は MergedAnnotation.missing() を取得します。
      パラメーター:
      annotationType - 取得するアノテーション型
      predicate - 一致する必要がある述語、または型の一致のみが必要な場合は null 
      selector - 集約内で最も適切なアノテーションを選択するために使用されるセレクタ、または最も近いものを選択するために null 
      戻り値:
      MergedAnnotation インスタンス
      関連事項:
    • get

      <A extends AnnotationSE> MergedAnnotation<A> get(StringSE annotationType)
      指定された型の最も近い一致するアノテーションまたはメタアノテーションを取得します。存在しない場合は MergedAnnotation.missing() を取得します。
      パラメーター:
      annotationType - 取得するアノテーション型の完全修飾クラス名
      戻り値:
      MergedAnnotation インスタンス
    • get

      <A extends AnnotationSE> MergedAnnotation<A> get(StringSE annotationType, @Nullable PredicateSE<? super MergedAnnotation<A>> predicate)
      指定された型の最も近い一致するアノテーションまたはメタアノテーションを取得します。存在しない場合は MergedAnnotation.missing() を取得します。
      パラメーター:
      annotationType - 取得するアノテーション型の完全修飾クラス名
      predicate - 一致する必要がある述語、または型の一致のみが必要な場合は null 
      戻り値:
      MergedAnnotation インスタンス
      関連事項:
    • get

      <A extends AnnotationSE> MergedAnnotation<A> get(StringSE annotationType, @Nullable PredicateSE<? super MergedAnnotation<A>> predicate, @Nullable MergedAnnotationSelector<A> selector)
      指定した型の一致するアノテーションまたはメタアノテーションを取得します。存在しない場合は MergedAnnotation.missing() を取得します。
      パラメーター:
      annotationType - 取得するアノテーション型の完全修飾クラス名
      predicate - 一致する必要がある述語、または型の一致のみが必要な場合は null 
      selector - 集約内で最も適切なアノテーションを選択するために使用されるセレクタ、または最も近いものを選択するために null 
      戻り値:
      MergedAnnotation インスタンス
      関連事項:
    • stream

      <A extends AnnotationSE> StreamSE<MergedAnnotation<A>> stream(ClassSE<A> annotationType)
      指定した型に一致するすべてのアノテーションとメタアノテーションをストリーミングします。

      結果のストリームは、stream() と同じ順序付け規則に従います。

      パラメーター:
      annotationType - 一致するアノテーション型
      戻り値:
      一致するアノテーションのストリーム
    • stream

      <A extends AnnotationSE> StreamSE<MergedAnnotation<A>> stream(StringSE annotationType)
      指定した型に一致するすべてのアノテーションとメタアノテーションをストリーミングします。

      結果のストリームは、stream() と同じ順序付け規則に従います。

      パラメーター:
      annotationType - 一致するアノテーション型の完全修飾クラス名
      戻り値:
      一致するアノテーションのストリーム
    • stream

      このコレクションに含まれるすべてのアノテーションとメタアノテーションをストリーミングします。

      結果のストリームは、最初に集約インデックス、次にアノテーション距離(最も近いアノテーションが最初)の順に並べられます。この順序は、ほとんどのユースケースで、最も適切なアノテーションがストリームの中で最も早く表示されることを意味します。

      戻り値:
      アノテーションのストリーム
    • from

      static MergedAnnotations from(AnnotatedElementSE element)
      指定された要素からのすべてのアノテーションとメタアノテーションを含む新しい MergedAnnotations インスタンスを作成します。

      結果のインスタンスには、継承されたアノテーションは含まれません。それらも含めたい場合は、適切な MergedAnnotations.SearchStrategy とともに from(AnnotatedElement, SearchStrategy) を使用する必要があります。

      パラメーター:
      element - ソース要素
      戻り値:
      要素のアノテーションを含む MergedAnnotations インスタンス
      関連事項:
    • from

      指定された要素からのすべてのアノテーションとメタアノテーション、および MergedAnnotations.SearchStrategy に応じて、関連する継承された要素を含む新しい MergedAnnotations インスタンスを作成します。
      パラメーター:
      element - ソース要素
      searchStrategy - 使用する検索戦略
      戻り値:
      マージされた要素のアノテーションを含む MergedAnnotations インスタンス
      関連事項:
    • from

      static MergedAnnotations from(AnnotatedElementSE element, MergedAnnotations.SearchStrategy searchStrategy, RepeatableContainers repeatableContainers)
      指定された要素からのすべてのアノテーションとメタアノテーション、および MergedAnnotations.SearchStrategy に応じて、関連する継承された要素を含む新しい MergedAnnotations インスタンスを作成します。
      パラメーター:
      element - ソース要素
      searchStrategy - 使用する検索戦略
      repeatableContainers - 要素アノテーションまたはメタアノテーションで使用できる繰り返し可能なコンテナー
      戻り値:
      マージされた要素のアノテーションを含む MergedAnnotations インスタンス
      関連事項:
    • from

      static MergedAnnotations from(AnnotatedElementSE element, MergedAnnotations.SearchStrategy searchStrategy, RepeatableContainers repeatableContainers, AnnotationFilter annotationFilter)
      指定された要素からのすべてのアノテーションとメタアノテーション、および MergedAnnotations.SearchStrategy に応じて、関連する継承された要素を含む新しい MergedAnnotations インスタンスを作成します。
      パラメーター:
      element - ソース要素
      searchStrategy - 使用する検索戦略
      repeatableContainers - 要素アノテーションまたはメタアノテーションで使用できる繰り返し可能なコンテナー
      annotationFilter - 考慮されるアノテーションを制限するために使用されるアノテーションフィルター
      戻り値:
      提供された要素のマージされたアノテーションを含む MergedAnnotations インスタンス
      関連事項:
    • from

      static MergedAnnotations from(AnnotationSE... annotations)
      指定されたアノテーションから新しい MergedAnnotations インスタンスを作成します。
      パラメーター:
      annotations - 含めるアノテーション
      戻り値:
      アノテーションを含む MergedAnnotations インスタンス
      関連事項:
    • from

      static MergedAnnotations from(ObjectSE source, AnnotationSE... annotations)
      指定されたアノテーションから新しい MergedAnnotations インスタンスを作成します。
      パラメーター:
      source - アノテーションのソース。このソースは、情報とロギングのためにのみ使用されます。指定されたアノテーションを実際に含む必要はなく、検索されません。
      annotations - 含めるアノテーション
      戻り値:
      アノテーションを含む MergedAnnotations インスタンス
      関連事項:
    • from

      static MergedAnnotations from(ObjectSE source, AnnotationSE[] annotations, RepeatableContainers repeatableContainers)
      指定されたアノテーションから新しい MergedAnnotations インスタンスを作成します。
      パラメーター:
      source - アノテーションのソース。このソースは、情報とロギングのためにのみ使用されます。指定されたアノテーションを実際に含む必要はなく、検索されません。
      annotations - 含めるアノテーション
      repeatableContainers - メタアノテーションで使用できる繰り返し可能なコンテナー
      戻り値:
      アノテーションを含む MergedAnnotations インスタンス
    • from

      static MergedAnnotations from(ObjectSE source, AnnotationSE[] annotations, RepeatableContainers repeatableContainers, AnnotationFilter annotationFilter)
      指定されたアノテーションから新しい MergedAnnotations インスタンスを作成します。
      パラメーター:
      source - アノテーションのソース。このソースは、情報とロギングのためにのみ使用されます。指定されたアノテーションを実際に含む必要はなく、検索されません。
      annotations - 含めるアノテーション
      repeatableContainers - メタアノテーションで使用できる繰り返し可能なコンテナー
      annotationFilter - 考慮されるアノテーションを制限するために使用されるアノテーションフィルター
      戻り値:
      アノテーションを含む MergedAnnotations インスタンス
    • of

      static MergedAnnotations of(CollectionSE<MergedAnnotation<?>> annotations)
      直接存在するアノテーションの指定されたコレクションから新しい MergedAnnotations インスタンスを作成します。このメソッドを使用すると、必ずしもリフレクションを使用してロードされるとは限らないアノテーションから MergedAnnotations インスタンスを作成できます。提供されるアノテーションはすべて directly present である必要があり、0aggregate index を持っている必要があります。

      結果の MergedAnnotations インスタンスには、指定されたアノテーションと、リフレクションを使用して読み取ることができるメタアノテーションの両方が含まれます。

      パラメーター:
      annotations - 含めるアノテーション
      戻り値:
      アノテーションを含む MergedAnnotations インスタンス
      関連事項:
    • search

      提供された MergedAnnotations.SearchStrategy と流れるような API を使用して、マージされたアノテーションを検索し、検索を構成および実行します。

      詳細は MergedAnnotations.Search を参照してください。

      パラメーター:
      searchStrategy - 使用する検索戦略
      戻り値:
      検索を実行する Search インスタンス
      導入:
      6.0