diff --git a/spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java b/spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java index 1ac4f84a5e..545b8a098e 100644 --- a/spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java +++ b/spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,8 +36,12 @@ import org.springframework.util.MultiValueMap; * *

{@code AnnotatedElementUtils} defines the public API for Spring's * meta-annotation programming model with support for annotation attribute - * overrides. If you do not need support for annotation attribute - * overrides, consider using {@link AnnotationUtils} instead. + * overrides and {@link AliasFor @AliasFor}. Note, however, that + * {@code AnnotatedElementUtils} is effectively a facade for the + * {@link MergedAnnotations} API. For fine-grained support consider using the + * {@code MergedAnnotations} API directly. If you do not need support for + * annotation attribute overrides, {@code @AliasFor}, or merged annotations, + * consider using {@link AnnotationUtils} instead. * *

Note that the features of this class are not provided by the JDK's * introspection facilities themselves. @@ -87,6 +91,7 @@ import org.springframework.util.MultiValueMap; * @since 4.0 * @see AliasFor * @see AnnotationAttributes + * @see MergedAnnotations * @see AnnotationUtils * @see BridgeMethodResolver */ diff --git a/spring-core/src/main/java/org/springframework/core/annotation/AnnotationUtils.java b/spring-core/src/main/java/org/springframework/core/annotation/AnnotationUtils.java index b46bd281ec..68f9e96e5a 100644 --- a/spring-core/src/main/java/org/springframework/core/annotation/AnnotationUtils.java +++ b/spring-core/src/main/java/org/springframework/core/annotation/AnnotationUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -60,7 +60,7 @@ import org.springframework.util.StringUtils; *

Terminology

* The terms directly present, indirectly present, and * present have the same meanings as defined in the class-level - * javadoc for {@link AnnotatedElement} (in Java 8). + * javadoc for {@link AnnotatedElement}. * *

An annotation is meta-present on an element if the annotation * is declared as a meta-annotation on some other annotation which is @@ -73,7 +73,8 @@ import org.springframework.util.StringUtils; * provide support for finding annotations used as meta-annotations. Consult the * javadoc for each method in this class for details. For fine-grained support for * meta-annotations with attribute overrides in composed annotations, - * consider using {@link AnnotatedElementUtils}'s more specific methods instead. + * consider using the {@link MergedAnnotations} API directly or the more specific + * methods in {@link AnnotatedElementUtils} instead. * *

Attribute Aliases

*

All public methods in this class that return annotations, arrays of @@ -97,6 +98,7 @@ import org.springframework.util.StringUtils; * @since 2.0 * @see AliasFor * @see AnnotationAttributes + * @see MergedAnnotations * @see AnnotatedElementUtils * @see BridgeMethodResolver * @see java.lang.reflect.AnnotatedElement#getAnnotations() diff --git a/spring-core/src/main/java/org/springframework/core/annotation/MergedAnnotations.java b/spring-core/src/main/java/org/springframework/core/annotation/MergedAnnotations.java index 7d054454a1..96bcd5ae50 100644 --- a/spring-core/src/main/java/org/springframework/core/annotation/MergedAnnotations.java +++ b/spring-core/src/main/java/org/springframework/core/annotation/MergedAnnotations.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2023 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,7 +37,7 @@ import org.springframework.util.Assert; *

@@ -140,6 +140,9 @@ import org.springframework.util.Assert; * @see MergedAnnotationCollectors * @see MergedAnnotationPredicates * @see MergedAnnotationSelectors + * @see AliasFor + * @see AnnotationUtils + * @see AnnotatedElementUtils */ public interface MergedAnnotations extends Iterable> { @@ -560,6 +563,7 @@ public interface MergedAnnotations extends Iterable * @see #withRepeatableContainers(RepeatableContainers) * @see #withAnnotationFilter(AnnotationFilter) * @see #from(AnnotatedElement) + * @see org.springframework.test.context.TestContextAnnotationUtils#searchEnclosingClass(Class) */ public Search withEnclosingClasses(Predicate> searchEnclosingClass) { Assert.notNull(searchEnclosingClass, "Predicate must not be null"); diff --git a/spring-test/src/main/java/org/springframework/test/context/TestContextAnnotationUtils.java b/spring-test/src/main/java/org/springframework/test/context/TestContextAnnotationUtils.java index 6053c11572..39e70bd32f 100644 --- a/spring-test/src/main/java/org/springframework/test/context/TestContextAnnotationUtils.java +++ b/spring-test/src/main/java/org/springframework/test/context/TestContextAnnotationUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -43,19 +43,20 @@ import org.springframework.util.ObjectUtils; /** * {@code TestContextAnnotationUtils} is a collection of utility methods that - * complements the standard support already available in {@link AnnotationUtils} - * and {@link AnnotatedElementUtils}, while transparently honoring - * {@link NestedTestConfiguration @NestedTestConfiguration} semantics. + * complements the standard support already available in {@link MergedAnnotations}, + * {@link AnnotationUtils}, and {@link AnnotatedElementUtils}, while transparently + * honoring {@link NestedTestConfiguration @NestedTestConfiguration} semantics. * *

Mainly for internal use within the Spring TestContext Framework * but also supported for third-party integrations with the TestContext framework. * - *

Whereas {@code AnnotationUtils} and {@code AnnotatedElementUtils} provide - * utilities for getting or finding annotations, - * {@code TestContextAnnotationUtils} goes a step further by providing support - * for determining the root class on which an annotation is declared, - * either directly or indirectly via a composed annotation. This - * additional information is encapsulated in an {@link AnnotationDescriptor}. + *

Whereas {@code MergedAnnotations}, {@code AnnotationUtils} and + * {@code AnnotatedElementUtils} provide utilities for getting or + * finding annotations, {@code TestContextAnnotationUtils} goes a step + * further by providing support for determining the root class on which + * an annotation is declared, either directly or indirectly via a + * composed annotation. This additional information is encapsulated in + * an {@link AnnotationDescriptor}. * *

The additional information provided by an {@code AnnotationDescriptor} is * required by the Spring TestContext Framework in order to be able to @@ -67,7 +68,11 @@ import org.springframework.util.ObjectUtils; * example, {@link ContextConfiguration#inheritLocations}. * * @author Sam Brannen - * @since 5.3, though originally since 4.0 as {@code org.springframework.test.util.MetaAnnotationUtils} + * @since 5.3 + * @see MergedAnnotations + * @see MergedAnnotations.Search + * @see MergedAnnotations.Search#withEnclosingClasses(Predicate) + * @see #searchEnclosingClass(Class) * @see AnnotationUtils * @see AnnotatedElementUtils * @see AnnotationDescriptor