Interface AnnotatedTypeMetadata

All Known Subinterfaces:
AnnotationMetadata, MethodMetadata
All Known Implementing Classes:
StandardAnnotationMetadata, StandardMethodMetadata

public interface AnnotatedTypeMetadata
Defines access to the annotations of a specific type (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.
Since:
4.0
Author:
Juergen Hoeller, Mark Fisher, Mark Pollack, Chris Beams, Phillip Webb, Sam Brannen
See Also:
  • 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 (e.g. "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 (e.g. "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 (e.g. "location") and a list of the attribute's values as map value; or null if no matching annotation is found
      See Also:
    • 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 (e.g. "location") and a list of the attribute's values as map value; or null if no matching annotation is found
      See Also:
    • 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

      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

      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: