Package org.springframework.core.type

# Interface AnnotatedTypeMetadata

All Known Subinterfaces:
  `AnnotationMetadata`, `MethodMetadata`

All Known Implementing Classes:
  `StandardAnnotationMetadata`, `StandardMethodMetadata`

public interface AnnotatedTypeMetadata
Defines access to the annotations on a specific `class` or `method`, in a form that does not necessarily require class loading of the types being inspected. Note, however, that classes for encountered annotations will be loaded.

WARNING: If an annotation cannot be loaded because one of its attributes references a `Class` or `Enum` that is not present in the classpath, that annotation will not be accessible via the `AnnotatedTypeMetadata` API. To assist with diagnosing such scenarios, you can set the log level for `"org.springframework.core.annotation.MergedAnnotation"` to `DEBUG`, `INFO`, or `WARN`.

Since:
  4.0
Author:
  Juergen Hoeller, Mark Fisher, Mark Pollack, Chris Beams, Phillip Webb, Sam Brannen
See Also:
  - `AnnotationMetadata`
  - `MethodMetadata`

## Method Summary

Modifier and Type
Method
Description
`default MultiValueMap<String,Object>`
`getAllAnnotationAttributes(String annotationName)`
Retrieve all attributes of all annotations of the given type, if any (i.e.
`default MultiValueMap<String,Object>`
`getAllAnnotationAttributes(String annotationName, boolean classValuesAsString)`
Retrieve all attributes of all annotations of the given type, if any (i.e.
`default Map<String,Object>`
`getAnnotationAttributes(String annotationName)`
Retrieve the attributes of the annotation of the given type, if any (i.e.
`default Map<String,Object>`
`getAnnotationAttributes(String annotationName, boolean classValuesAsString)`
Retrieve the attributes of the annotation of the given type, if any (i.e.
`MergedAnnotations`
`getAnnotations()`
Get annotation details based on the direct annotations and meta-annotations of the underlying element.
`default Set<AnnotationAttributes>`
`getMergedRepeatableAnnotationAttributes(Class<? extends Annotation> annotationType, Class<? extends Annotation> containerType, boolean classValuesAsString)`
Retrieve all repeatable annotations of the given type within the annotation hierarchy above the underlying element (as direct annotation or meta-annotation); and for each annotation found, merge that annotation's attributes with matching attributes from annotations in lower levels of the annotation hierarchy and store the results in an instance of `AnnotationAttributes`.
`default Set<AnnotationAttributes>`
`getMergedRepeatableAnnotationAttributes(Class<? extends Annotation> annotationType, Class<? extends Annotation> containerType, boolean classValuesAsString, boolean sortByReversedMetaDistance)`
Retrieve all repeatable annotations of the given type within the annotation hierarchy above the underlying element (as direct annotation or meta-annotation); and for each annotation found, merge that annotation's attributes with matching attributes from annotations in lower levels of the annotation hierarchy and store the results in an instance of `AnnotationAttributes`.
`default Set<AnnotationAttributes>`
`getMergedRepeatableAnnotationAttributes(Class<? extends Annotation> annotationType, Class<? extends Annotation> containerType, Predicate<MergedAnnotation<? extends Annotation>> predicate, boolean classValuesAsString, boolean sortByReversedMetaDistance)`
Retrieve all repeatable annotations of the given type within the annotation hierarchy above the underlying element (as direct annotation or meta-annotation); and for each annotation found, merge that annotation's attributes with matching attributes from annotations in lower levels of the annotation hierarchy and store the results in an instance of `AnnotationAttributes`.
`default boolean`
`isAnnotated(String annotationName)`
Determine whether the underlying element has an annotation or meta-annotation of the given type defined.

## Method Details

### getAnnotations

MergedAnnotations getAnnotations()
Get annotation details based on the direct annotations and meta-annotations of the underlying element.

Returns:
  merged annotations based on the direct annotations and meta-annotations
Since:
  5.2

### isAnnotated

default boolean isAnnotated(String annotationName)
Determine whether the underlying element has an annotation or meta-annotation of the given type defined.

If this method returns `true`, then `getAnnotationAttributes(java.lang.String)` will return a non-null Map.

Parameters:
  `annotationName` - the fully-qualified class name of the annotation type to look for
Returns:
  whether a matching annotation is defined

### getAnnotationAttributes

@Nullable default Map<String,Object> getAnnotationAttributes(String annotationName)
Retrieve the attributes of the annotation of the given type, if any (i.e. if defined on the underlying element, as direct annotation or meta-annotation).

`@AliasFor` semantics are fully supported, both within a single annotation and within annotation hierarchies.

Parameters:
  `annotationName` - the fully-qualified class name of the annotation type to look for
Returns:
  a `Map` of attributes, with each annotation attribute name as map key (for example, "location") and the attribute's value as map value; or `null` if no matching annotation is found

### getAnnotationAttributes

@Nullable default Map<String,Object> getAnnotationAttributes(String annotationName, boolean classValuesAsString)
Retrieve the attributes of the annotation of the given type, if any (i.e. if defined on the underlying element, as direct annotation or meta-annotation).

`@AliasFor` semantics are fully supported, both within a single annotation and within annotation hierarchies.

Parameters:
  `annotationName` - the fully-qualified class name of the annotation type to look for
  `classValuesAsString` - whether to convert class references to String class names for exposure as values in the returned Map, instead of Class references which might potentially have to be loaded first
Returns:
  a `Map` of attributes, with each annotation attribute name as map key (for example, "location") and the attribute's value as map value; or `null` if no matching annotation is found

### getAllAnnotationAttributes

@Nullable default MultiValueMap<String,Object> getAllAnnotationAttributes(String annotationName)
Retrieve all attributes of all annotations of the given type, if any (i.e. if defined on the underlying element, as direct annotation or meta-annotation).

Note: this method does not take attribute overrides on composed annotations into account.

Parameters:
  `annotationName` - the fully-qualified class name of the annotation type to look for
Returns:
  a `MultiValueMap` of attributes, with each annotation attribute name as map key (for example, "location") and a list of the attribute's values as map value; or `null` if no matching annotation is found
See Also:
  - `getAllAnnotationAttributes(String, boolean)`

### getAllAnnotationAttributes

@Nullable default MultiValueMap<String,Object> getAllAnnotationAttributes(String annotationName, boolean classValuesAsString)
Retrieve all attributes of all annotations of the given type, if any (i.e. if defined on the underlying element, as direct annotation or meta-annotation).

Note: this method does not take attribute overrides on composed annotations into account.

Parameters:
  `annotationName` - the fully-qualified class name of the annotation type to look for
  `classValuesAsString` - whether to convert class references to String class names for exposure as values in the returned Map, instead of Class references which might potentially have to be loaded first
Returns:
  a `MultiValueMap` of attributes, with each annotation attribute name as map key (for example, "location") and a list of the attribute's values as map value; or `null` if no matching annotation is found
See Also:
  - `getAllAnnotationAttributes(String)`

### getMergedRepeatableAnnotationAttributes

default Set<AnnotationAttributes> getMergedRepeatableAnnotationAttributes(Class<? extends Annotation> annotationType, Class<? extends Annotation> containerType, boolean classValuesAsString)
Retrieve all repeatable annotations of the given type within the annotation hierarchy above the underlying element (as direct annotation or meta-annotation); and for each annotation found, merge that annotation's attributes with matching attributes from annotations in lower levels of the annotation hierarchy and store the results in an instance of `AnnotationAttributes`.

`@AliasFor` semantics are fully supported, both within a single annotation and within annotation hierarchies.

Parameters:
  `annotationType` - the annotation type to find
  `containerType` - the type of the container that holds the annotations
  `classValuesAsString` - whether to convert class references to `String` class names for exposure as values in the returned `AnnotationAttributes`, instead of `Class` references which might potentially have to be loaded first
Returns:
  the set of all merged repeatable `AnnotationAttributes` found, or an empty set if none were found
Since:
  6.1
See Also:
  - `getMergedRepeatableAnnotationAttributes(Class, Class, boolean, boolean)`
  - `getMergedRepeatableAnnotationAttributes(Class, Class, Predicate, boolean, boolean)`

### getMergedRepeatableAnnotationAttributes

default Set<AnnotationAttributes> getMergedRepeatableAnnotationAttributes(Class<? extends Annotation> annotationType, Class<? extends Annotation> containerType, boolean classValuesAsString, boolean sortByReversedMetaDistance)
Retrieve all repeatable annotations of the given type within the annotation hierarchy above the underlying element (as direct annotation or meta-annotation); and for each annotation found, merge that annotation's attributes with matching attributes from annotations in lower levels of the annotation hierarchy and store the results in an instance of `AnnotationAttributes`.

`@AliasFor` semantics are fully supported, both within a single annotation and within annotation hierarchies.

If the `sortByReversedMetaDistance` flag is set to `true`, the results will be sorted in `reversed` order based on each annotation's meta distance, which effectively orders meta-annotations before annotations that are declared directly on the underlying element.

Parameters:
  `annotationType` - the annotation type to find
  `containerType` - the type of the container that holds the annotations
  `classValuesAsString` - whether to convert class references to `String` class names for exposure as values in the returned `AnnotationAttributes`, instead of `Class` references which might potentially have to be loaded first
  `sortByReversedMetaDistance` - `true` if the results should be sorted in reversed order based on each annotation's meta distance
Returns:
  the set of all merged repeatable `AnnotationAttributes` found, or an empty set if none were found
Since:
  6.1
See Also:
  - `getMergedRepeatableAnnotationAttributes(Class, Class, boolean)`
  - `getMergedRepeatableAnnotationAttributes(Class, Class, Predicate, boolean, boolean)`

### getMergedRepeatableAnnotationAttributes

default Set<AnnotationAttributes> getMergedRepeatableAnnotationAttributes(Class<? extends Annotation> annotationType, Class<? extends Annotation> containerType, Predicate<MergedAnnotation<? extends Annotation>> predicate, boolean classValuesAsString, boolean sortByReversedMetaDistance)
Retrieve all repeatable annotations of the given type within the annotation hierarchy above the underlying element (as direct annotation or meta-annotation); and for each annotation found, merge that annotation's attributes with matching attributes from annotations in lower levels of the annotation hierarchy and store the results in an instance of `AnnotationAttributes`.

`@AliasFor` semantics are fully supported, both within a single annotation and within annotation hierarchies.

The supplied `Predicate` will be used to filter the results. For example, supply `mergedAnnotation -> true` to include all annotations in the results; supply `MergedAnnotation::isDirectlyPresent` to limit the results to directly declared annotations, etc.

If the `sortByReversedMetaDistance` flag is set to `true`, the results will be sorted in `reversed` order based on each annotation's meta distance, which effectively orders meta-annotations before annotations that are declared directly on the underlying element.

Parameters:
  `annotationType` - the annotation type to find
  `containerType` - the type of the container that holds the annotations
  `predicate` - a `Predicate` to apply to each `MergedAnnotation` to determine if it should be included in the results
  `classValuesAsString` - whether to convert class references to `String` class names for exposure as values in the returned `AnnotationAttributes`, instead of `Class` references which might potentially have to be loaded first
  `sortByReversedMetaDistance` - `true` if the results should be sorted in reversed order based on each annotation's meta distance
Returns:
  the set of all merged repeatable `AnnotationAttributes` found, or an empty set if none were found
Since:
  6.1.2
See Also:
  - `getMergedRepeatableAnnotationAttributes(Class, Class, boolean)`
  - `getMergedRepeatableAnnotationAttributes(Class, Class, boolean, boolean)`