org.springframework.core.type

## Interface AnnotationMetadata

- All Superinterfaces:
    ClassMetadata
  All Known Implementing Classes:
    StandardAnnotationMetadata

      public interface AnnotationMetadata
      extends ClassMetadata

  Interface that defines abstract access to the annotations of a specific class, in a form that does not require that class to be loaded yet.
  Since:
    2.5
  Author:
    Juergen Hoeller, Mark Fisher
  See Also:
    `StandardAnnotationMetadata`, `MetadataReader.getAnnotationMetadata()`

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `Set<MethodMetadata>` | `getAnnotatedMethods(String annotationType)` Retrieve the method metadata for all methods that are annotated (or meta-annotated) with the given annotation type.
    `Map<String,Object>` | `getAnnotationAttributes(String annotationType)` Retrieve the attributes of the annotation of the given type, if any (i.e.
    `Map<String,Object>` | `getAnnotationAttributes(String annotationType, boolean classValuesAsString)` Retrieve the attributes of the annotation of the given type, if any (i.e.
    `Set<String>` | `getAnnotationTypes()` Return the names of all annotation types defined on the underlying class.
    `Set<String>` | `getMetaAnnotationTypes(String annotationType)` Return the names of all meta-annotation types defined on the given annotation type of the underlying class.
    `boolean` | `hasAnnotatedMethods(String annotationType)` Determine whether the underlying class has any methods that are annotated (or meta-annotated) with the given annotation type.
    `boolean` | `hasAnnotation(String annotationType)` Determine whether the underlying class has an annotation of the given type defined.
    `boolean` | `hasMetaAnnotation(String metaAnnotationType)` Determine whether the underlying class has an annotation that is itself annotated with the meta-annotation of the given type.
    `boolean` | `isAnnotated(String annotationType)` Determine whether the underlying class has an annotation or meta-annotation of the given type defined.

    - ### Methods inherited from interface org.springframework.core.type.ClassMetadata

      `getClassName, getEnclosingClassName, getInterfaceNames, getMemberClassNames, getSuperClassName, hasEnclosingClass, hasSuperClass, isAbstract, isConcrete, isFinal, isIndependent, isInterface`

- - ### Method Detail

    - #### getAnnotationTypes

          Set<String> getAnnotationTypes()

      Return the names of all annotation types defined on the underlying class.
      Returns:
        the annotation type names

    - #### getMetaAnnotationTypes

          Set<String> getMetaAnnotationTypes(String annotationType)

      Return the names of all meta-annotation types defined on the given annotation type of the underlying class.
      Parameters:
        `annotationType` - the meta-annotation type to look for
      Returns:
        the meta-annotation type names

    - #### hasAnnotation

          boolean hasAnnotation(String annotationType)

      Determine whether the underlying class has an annotation of the given type defined.
      Parameters:
        `annotationType` - the annotation type to look for
      Returns:
        whether a matching annotation is defined

    - #### hasMetaAnnotation

          boolean hasMetaAnnotation(String metaAnnotationType)

      Determine whether the underlying class has an annotation that is itself annotated with the meta-annotation of the given type.
      Parameters:
        `metaAnnotationType` - the meta-annotation type to look for
      Returns:
        whether a matching meta-annotation is defined

    - #### isAnnotated

          boolean isAnnotated(String annotationType)

      Determine whether the underlying class has an annotation or meta-annotation of the given type defined.

      This is equivalent to a "hasAnnotation || hasMetaAnnotation" check. If this method returns `true`, then `getAnnotationAttributes(java.lang.String)` will return a non-null Map.

      Parameters:
        `annotationType` - the annotation type to look for
      Returns:
        whether a matching annotation is defined

    - #### getAnnotationAttributes

          Map<String,Object> getAnnotationAttributes(String annotationType)

      Retrieve the attributes of the annotation of the given type, if any (i.e. if defined on the underlying class, as direct annotation or as meta-annotation).
      Parameters:
        `annotationType` - the annotation type to look for
      Returns:
        a Map of attributes, with the attribute name as key (e.g. "value") and the defined attribute value as Map value. This return value will be `null` if no matching annotation is defined.

    - #### getAnnotationAttributes

          Map<String,Object> getAnnotationAttributes(String annotationType,
                                                   boolean classValuesAsString)

      Retrieve the attributes of the annotation of the given type, if any (i.e. if defined on the underlying class, as direct annotation or as meta-annotation).
      Parameters:
        `annotationType` - 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 the attribute name as key (e.g. "value") and the defined attribute value as Map value. This return value will be `null` if no matching annotation is defined.

    - #### hasAnnotatedMethods

          boolean hasAnnotatedMethods(String annotationType)

      Determine whether the underlying class has any methods that are annotated (or meta-annotated) with the given annotation type.

    - #### getAnnotatedMethods

          Set<MethodMetadata> getAnnotatedMethods(String annotationType)

      Retrieve the method metadata for all methods that are annotated (or meta-annotated) with the given annotation type.

      For any returned method, `MethodMetadata.isAnnotated(java.lang.String)` will return `true` for the given annotation type.

      Parameters:
        `annotationType` - the annotation type to look for
      Returns:
        a Set of `MethodMetadata` for methods that have a matching annotation. The return value will be an empty set if no methods match the annotation type.