org.springframework.core.type.classreading

## 类 MethodMetadataReadingVisitor

- java.lang.Object
- - org.springframework.asm.MethodVisitor
  - - org.springframework.core.type.classreading.MethodMetadataReadingVisitor

- 所有已实现的接口:
    AnnotatedTypeMetadata, MethodMetadata

      public class MethodMetadataReadingVisitor
      extends MethodVisitor
      implements MethodMetadata

  ASM method visitor which looks for the annotations defined on a method, exposing them through the `MethodMetadata` interface.
  从以下版本开始:
    3.0
  作者:
    Juergen Hoeller, Mark Pollack, Costin Leau, Chris Beams, Phillip Webb

- - ### 字段概要

    字段
    限定符和类型 | 字段和说明
    --- | ---
    `protected int` | `access`
    `protected LinkedMultiValueMap<String,AnnotationAttributes>` | `attributesMap`
    `protected ClassLoader` | `classLoader`
    `protected String` | `declaringClassName`
    `protected Map<String,Set<String>>` | `metaAnnotationMap`
    `protected Set<MethodMetadata>` | `methodMetadataSet`
    `protected String` | `methodName`
    `protected String` | `returnTypeName`

    - ### 从类继承的字段 org.springframework.asm.MethodVisitor

      `api, mv`

  - ### 构造器概要

    构造器
    构造器和说明
    `MethodMetadataReadingVisitor(String methodName, int access, String declaringClassName, String returnTypeName, ClassLoader classLoader, Set<MethodMetadata> methodMetadataSet)`

  - ### 方法概要

    所有方法 实例方法 具体方法
    限定符和类型 | 方法和说明
    --- | ---
    `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).
    `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).
    `AnnotationAttributes` | `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), also taking attribute overrides on composed annotations into account.
    `AnnotationAttributes` | `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), also taking attribute overrides on composed annotations into account.
    `String` | `getDeclaringClassName()` Return the fully-qualified name of the class that declares this method.
    `String` | `getMethodName()` Return the name of the method.
    `String` | `getReturnTypeName()` Return the fully-qualified name of this method's declared return type.
    `boolean` | `isAbstract()` Return whether the underlying method is effectively abstract: i.e. marked as abstract on a class or declared as a regular, non-default method in an interface.
    `boolean` | `isAnnotated(String annotationName)` Determine whether the underlying element has an annotation or meta-annotation of the given type defined.
    `boolean` | `isFinal()` Return whether the underlying method is marked as 'final'.
    `boolean` | `isOverridable()` Return whether the underlying method is overridable, i.e. not marked as static, final or private.
    `boolean` | `isStatic()` Return whether the underlying method is declared as 'static'.
    `AnnotationVisitor` | `visitAnnotation(String desc, boolean visible)` Visits an annotation of this method.

    - ### 从类继承的方法 org.springframework.asm.MethodVisitor

      `visitAnnotationDefault, visitAttribute, visitCode, visitEnd, visitFieldInsn, visitFrame, visitIincInsn, visitInsn, visitInsnAnnotation, visitIntInsn, visitInvokeDynamicInsn, visitJumpInsn, visitLabel, visitLdcInsn, visitLineNumber, visitLocalVariable, visitLocalVariableAnnotation, visitLookupSwitchInsn, visitMaxs, visitMethodInsn, visitMethodInsn, visitMultiANewArrayInsn, visitParameter, visitParameterAnnotation, visitTableSwitchInsn, visitTryCatchAnnotation, visitTryCatchBlock, visitTypeAnnotation, visitTypeInsn, visitVarInsn`

    - ### 从类继承的方法 java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### 字段详细资料

    - #### methodName

          protected final String methodName

    - #### access

          protected final int access

    - #### declaringClassName

          protected final String declaringClassName

    - #### returnTypeName

          protected final String returnTypeName

    - #### classLoader

          @Nullable
          protected final ClassLoader classLoader

    - #### methodMetadataSet

          protected final Set<MethodMetadata> methodMetadataSet

    - #### metaAnnotationMap

          protected final Map<String,Set<String>> metaAnnotationMap

    - #### attributesMap

          protected final LinkedMultiValueMap<String,AnnotationAttributes> attributesMap

  - ### 构造器详细资料

    - #### MethodMetadataReadingVisitor

          public MethodMetadataReadingVisitor(String methodName,
                                              int access,
                                              String declaringClassName,
                                              String returnTypeName,
                                              @Nullable
                                              ClassLoader classLoader,
                                              Set<MethodMetadata> methodMetadataSet)

  - ### 方法详细资料

    - #### visitAnnotation

          public AnnotationVisitor visitAnnotation(String desc,
                                                   boolean visible)

      从类复制的说明: `MethodVisitor`
      Visits an annotation of this method.
      覆盖:
        `visitAnnotation` 在类中 `MethodVisitor`
      参数:
        `desc` - the class descriptor of the annotation class.
        `visible` - `true` if the annotation is visible at runtime.
      返回:
        a visitor to visit the annotation values, or `null` if this visitor is not interested in visiting this annotation.

    - #### getMethodName

          public String getMethodName()

      从接口复制的说明: `MethodMetadata`
      Return the name of the method.
      指定者:
        `getMethodName` 在接口中 `MethodMetadata`

    - #### isAbstract

          public boolean isAbstract()

      从接口复制的说明: `MethodMetadata`
      Return whether the underlying method is effectively abstract: i.e. marked as abstract on a class or declared as a regular, non-default method in an interface.
      指定者:
        `isAbstract` 在接口中 `MethodMetadata`

    - #### isStatic

          public boolean isStatic()

      从接口复制的说明: `MethodMetadata`
      Return whether the underlying method is declared as 'static'.
      指定者:
        `isStatic` 在接口中 `MethodMetadata`

    - #### isFinal

          public boolean isFinal()

      从接口复制的说明: `MethodMetadata`
      Return whether the underlying method is marked as 'final'.
      指定者:
        `isFinal` 在接口中 `MethodMetadata`

    - #### isOverridable

          public boolean isOverridable()

      从接口复制的说明: `MethodMetadata`
      Return whether the underlying method is overridable, i.e. not marked as static, final or private.
      指定者:
        `isOverridable` 在接口中 `MethodMetadata`

    - #### isAnnotated

          public boolean isAnnotated(String annotationName)

      从接口复制的说明: `AnnotatedTypeMetadata`
      Determine whether the underlying element has an annotation or meta-annotation of the given type defined.

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

      指定者:
        `isAnnotated` 在接口中 `AnnotatedTypeMetadata`
      参数:
        `annotationName` - the fully qualified class name of the annotation type to look for
      返回:
        whether a matching annotation is defined

    - #### getAnnotationAttributes

          @Nullable
          public AnnotationAttributes getAnnotationAttributes(String annotationName)

      从接口复制的说明: `AnnotatedTypeMetadata`
      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), also taking attribute overrides on composed annotations into account.
      指定者:
        `getAnnotationAttributes` 在接口中 `AnnotatedTypeMetadata`
      参数:
        `annotationName` - the fully qualified class name of the annotation type to look for
      返回:
        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

          @Nullable
          public AnnotationAttributes getAnnotationAttributes(String annotationName,
                                                                         boolean classValuesAsString)

      从接口复制的说明: `AnnotatedTypeMetadata`
      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), also taking attribute overrides on composed annotations into account.
      指定者:
        `getAnnotationAttributes` 在接口中 `AnnotatedTypeMetadata`
      参数:
        `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
      返回:
        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.

    - #### getAllAnnotationAttributes

          @Nullable
          public MultiValueMap<String,Object> getAllAnnotationAttributes(String annotationName)

      从接口复制的说明: `AnnotatedTypeMetadata`
      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 that this variant does not take attribute overrides into account.
      指定者:
        `getAllAnnotationAttributes` 在接口中 `AnnotatedTypeMetadata`
      参数:
        `annotationName` - the fully qualified class name of the annotation type to look for
      返回:
        a MultiMap of attributes, with the attribute name as key (e.g. "value") and a list of the defined attribute values as Map value. This return value will be `null` if no matching annotation is defined.
      另请参阅:
        `AnnotatedTypeMetadata.getAllAnnotationAttributes(String, boolean)`

    - #### getAllAnnotationAttributes

          @Nullable
          public MultiValueMap<String,Object> getAllAnnotationAttributes(String annotationName,
                                                                                    boolean classValuesAsString)

      从接口复制的说明: `AnnotatedTypeMetadata`
      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 that this variant does not take attribute overrides into account.
      指定者:
        `getAllAnnotationAttributes` 在接口中 `AnnotatedTypeMetadata`
      参数:
        `annotationName` - the fully qualified class name of the annotation type to look for
        `classValuesAsString` - whether to convert class references to String
      返回:
        a MultiMap of attributes, with the attribute name as key (e.g. "value") and a list of the defined attribute values as Map value. This return value will be `null` if no matching annotation is defined.
      另请参阅:
        `AnnotatedTypeMetadata.getAllAnnotationAttributes(String)`

    - #### getDeclaringClassName

          public String getDeclaringClassName()

      从接口复制的说明: `MethodMetadata`
      Return the fully-qualified name of the class that declares this method.
      指定者:
        `getDeclaringClassName` 在接口中 `MethodMetadata`

    - #### getReturnTypeName

          public String getReturnTypeName()

      从接口复制的说明: `MethodMetadata`
      Return the fully-qualified name of this method's declared return type.
      指定者:
        `getReturnTypeName` 在接口中 `MethodMetadata`