インターフェース MergedAnnotations
- すべてのスーパーインターフェース:
IterableSE<MergedAnnotation<AnnotationSE>>
Class
SE や Method
SE などのソースから取得した、マージされたアノテーションのコレクションへのアクセスを提供します。マージされた各アノテーションは、さまざまなソース値から属性値を「マージ」できるビューを表します。通常は次のとおりです。
- アノテーション内の 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 AnnotatedElement
SE から取得できます。また、リフレクションを使用しないソース(バイトコードを直接解析するソースなど)にも使用できます。
さまざまな検索戦略を使用して、集約するアノテーションを含む関連するソース要素を見つけることができます。例: 次のコードは、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
- 関連事項:
ネストされたクラスのサマリー
修飾子と型インターフェース説明static final class
MergedAnnotations
モデルで使用される検索アルゴリズムを構成し、検索を実行するための Fluent API。static enum
search(SearchStrategy)
とfrom(AnnotatedElement, SearchStrategy)
およびそのバリエーションでサポートされている検索戦略。メソッドのサマリー
修飾子と型メソッド説明static MergedAnnotations
from
(AnnotationSE... annotations) 指定されたアノテーションから新しいMergedAnnotations
インスタンスを作成します。static MergedAnnotations
from
(ObjectSE source, AnnotationSE... annotations) 指定されたアノテーションから新しいMergedAnnotations
インスタンスを作成します。static MergedAnnotations
from
(ObjectSE source, AnnotationSE[] annotations, RepeatableContainers repeatableContainers) 指定されたアノテーションから新しいMergedAnnotations
インスタンスを作成します。static MergedAnnotations
from
(ObjectSE source, AnnotationSE[] annotations, RepeatableContainers repeatableContainers, AnnotationFilter annotationFilter) 指定されたアノテーションから新しいMergedAnnotations
インスタンスを作成します。static MergedAnnotations
from
(AnnotatedElementSE element) 指定された要素からのすべてのアノテーションとメタアノテーションを含む新しいMergedAnnotations
インスタンスを作成します。static MergedAnnotations
from
(AnnotatedElementSE element, MergedAnnotations.SearchStrategy searchStrategy) 指定された要素からのすべてのアノテーションとメタアノテーション、およびMergedAnnotations.SearchStrategy
に応じて、関連する継承された要素を含む新しいMergedAnnotations
インスタンスを作成します。static MergedAnnotations
from
(AnnotatedElementSE element, MergedAnnotations.SearchStrategy searchStrategy, RepeatableContainers repeatableContainers) 指定された要素からのすべてのアノテーションとメタアノテーション、およびMergedAnnotations.SearchStrategy
に応じて、関連する継承された要素を含む新しいMergedAnnotations
インスタンスを作成します。static MergedAnnotations
from
(AnnotatedElementSE element, MergedAnnotations.SearchStrategy searchStrategy, RepeatableContainers repeatableContainers, AnnotationFilter annotationFilter) 指定された要素からのすべてのアノテーションとメタアノテーション、およびMergedAnnotations.SearchStrategy
に応じて、関連する継承された要素を含む新しいMergedAnnotations
インスタンスを作成します。<A extends AnnotationSE>
MergedAnnotation<A>指定された型の最も近い一致するアノテーションまたはメタアノテーションを取得します。存在しない場合はMergedAnnotation.missing()
を取得します。<A extends AnnotationSE>
MergedAnnotation<A>get
(ClassSE<A> annotationType, PredicateSE<? super MergedAnnotation<A>> predicate) 指定された型の最も近い一致するアノテーションまたはメタアノテーションを取得します。存在しない場合はMergedAnnotation.missing()
を取得します。<A extends AnnotationSE>
MergedAnnotation<A>get
(ClassSE<A> annotationType, PredicateSE<? super MergedAnnotation<A>> predicate, MergedAnnotationSelector<A> selector) 指定した型の一致するアノテーションまたはメタアノテーションを取得します。存在しない場合はMergedAnnotation.missing()
を取得します。<A extends AnnotationSE>
MergedAnnotation<A>指定された型の最も近い一致するアノテーションまたはメタアノテーションを取得します。存在しない場合はMergedAnnotation.missing()
を取得します。<A extends AnnotationSE>
MergedAnnotation<A>get
(StringSE annotationType, PredicateSE<? super MergedAnnotation<A>> predicate) 指定された型の最も近い一致するアノテーションまたはメタアノテーションを取得します。存在しない場合はMergedAnnotation.missing()
を取得します。<A extends AnnotationSE>
MergedAnnotation<A>get
(StringSE annotationType, PredicateSE<? super MergedAnnotation<A>> predicate, MergedAnnotationSelector<A> selector) 指定した型の一致するアノテーションまたはメタアノテーションを取得します。存在しない場合はMergedAnnotation.missing()
を取得します。<A extends AnnotationSE>
booleanisDirectlyPresent
(ClassSE<A> annotationType) 指定されたアノテーション型が直接存在するかどうかを判別します。boolean
isDirectlyPresent
(StringSE annotationType) 指定されたアノテーション型が直接存在するかどうかを判別します。<A extends AnnotationSE>
boolean指定されたアノテーション型が直接存在するかメタ存在であるかを判別します。boolean
指定されたアノテーション型が直接存在するかメタ存在であるかを判別します。static MergedAnnotations
of
(CollectionSE<MergedAnnotation<?>> annotations) 直接存在するアノテーションの指定されたコレクションから新しいMergedAnnotations
インスタンスを作成します。static MergedAnnotations.Search
search
(MergedAnnotations.SearchStrategy searchStrategy) 提供されたMergedAnnotations.SearchStrategy
と流れるような API を使用して、マージされたアノテーションを検索し、検索を構成および実行します。stream()
このコレクションに含まれるすべてのアノテーションとメタアノテーションをストリーミングします。<A extends AnnotationSE>
StreamSE<MergedAnnotation<A>>指定した型に一致するすべてのアノテーションとメタアノテーションをストリーミングします。<A extends AnnotationSE>
StreamSE<MergedAnnotation<A>>指定した型に一致するすべてのアノテーションとメタアノテーションをストリーミングします。インターフェース java.lang.IterableSE から継承されたメソッド
forEachSE, iterator, spliterator
メソッドの詳細
isPresent
指定されたアノテーション型が直接存在するかメタ存在であるかを判別します。get(annotationType).isPresent()
を呼び出すのと同じです。- パラメーター:
annotationType
- チェックするアノテーション型- 戻り値:
- アノテーションが存在する場合は
true
isPresent
指定されたアノテーション型が直接存在するかメタ存在であるかを判別します。get(annotationType).isPresent()
を呼び出すのと同じです。- パラメーター:
annotationType
- チェックするアノテーション型の完全修飾クラス名- 戻り値:
- アノテーションが存在する場合は
true
isDirectlyPresent
指定されたアノテーション型が直接存在するかどうかを判別します。get(annotationType).isDirectlyPresent()
を呼び出すのと同じです。- パラメーター:
annotationType
- チェックするアノテーション型- 戻り値:
- アノテーションが直接存在する場合は
true
isDirectlyPresent
指定されたアノテーション型が直接存在するかどうかを判別します。get(annotationType).isDirectlyPresent()
を呼び出すのと同じです。- パラメーター:
annotationType
- チェックするアノテーション型の完全修飾クラス名- 戻り値:
- アノテーションが直接存在する場合は
true
get
指定された型の最も近い一致するアノテーションまたはメタアノテーションを取得します。存在しない場合は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
指定された型の最も近い一致するアノテーションまたはメタアノテーションを取得します。存在しない場合は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
指定した型に一致するすべてのアノテーションとメタアノテーションをストリーミングします。結果のストリームは、
stream()
と同じ順序付け規則に従います。- パラメーター:
annotationType
- 一致するアノテーション型- 戻り値:
- 一致するアノテーションのストリーム
stream
指定した型に一致するすべてのアノテーションとメタアノテーションをストリーミングします。結果のストリームは、
stream()
と同じ順序付け規則に従います。- パラメーター:
annotationType
- 一致するアノテーション型の完全修飾クラス名- 戻り値:
- 一致するアノテーションのストリーム
stream
StreamSE<MergedAnnotation<AnnotationSE>> stream()このコレクションに含まれるすべてのアノテーションとメタアノテーションをストリーミングします。結果のストリームは、最初に集約インデックス、次にアノテーション距離(最も近いアノテーションが最初)の順に並べられます。この順序は、ほとんどのユースケースで、最も適切なアノテーションがストリームの中で最も早く表示されることを意味します。
- 戻り値:
- アノテーションのストリーム
from
指定された要素からのすべてのアノテーションとメタアノテーションを含む新しいMergedAnnotations
インスタンスを作成します。結果のインスタンスには、継承されたアノテーションは含まれません。それらも含めたい場合は、適切な
MergedAnnotations.SearchStrategy
とともにfrom(AnnotatedElement, SearchStrategy)
を使用する必要があります。- パラメーター:
element
- ソース要素- 戻り値:
- 要素のアノテーションを含む
MergedAnnotations
インスタンス - 関連事項:
from
static MergedAnnotations from(AnnotatedElementSE element, MergedAnnotations.SearchStrategy searchStrategy) 指定された要素からのすべてのアノテーションとメタアノテーション、および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
指定されたアノテーションから新しいMergedAnnotations
インスタンスを作成します。- パラメーター:
annotations
- 含めるアノテーション- 戻り値:
- アノテーションを含む
MergedAnnotations
インスタンス - 関連事項:
from
指定されたアノテーションから新しい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
直接存在するアノテーションの指定されたコレクションから新しいMergedAnnotations
インスタンスを作成します。このメソッドを使用すると、必ずしもリフレクションを使用してロードされるとは限らないアノテーションからMergedAnnotations
インスタンスを作成できます。提供されるアノテーションはすべてdirectly present
である必要があり、0
のaggregate index
を持っている必要があります。結果の
MergedAnnotations
インスタンスには、指定されたアノテーションと、リフレクションを使用して読み取ることができるメタアノテーションの両方が含まれます。- パラメーター:
annotations
- 含めるアノテーション- 戻り値:
- アノテーションを含む
MergedAnnotations
インスタンス - 関連事項:
search
提供されたMergedAnnotations.SearchStrategy
と流れるような API を使用して、マージされたアノテーションを検索し、検索を構成および実行します。詳細は
MergedAnnotations.Search
を参照してください。- パラメーター:
searchStrategy
- 使用する検索戦略- 戻り値:
- 検索を実行する
Search
インスタンス - 導入:
- 6.0