Spring笔记-Metadata

1.Metadata概念

metata在org.springframework.core.type包名下,主要有以下相关接口和类


Spring笔记-Metadata_第1张图片

其在Spring的Condition接口中有用到

来看一下ClassMetadata的接口

Spring笔记-Metadata_第2张图片

基本是Class相关的一致的,所以ClassMetadata实质是对Class的一种抽象和适配

2.StandardClassMetadata实现

下面看一下ClassMetadata的实现类StandardClassMetadata,可以看到构造函数中传入的参数是Class,方法基本是对Class的适配

代码示例1

public class StandardClassMetadata implements ClassMetadata {

   private final Class introspectedClass;


   /**
    * Create a new StandardClassMetadata wrapper for the given Class.
    * @param introspectedClass the Class to introspect
    */
   public StandardClassMetadata(Class introspectedClass) {
      Assert.notNull(introspectedClass, "Class must not be null");
      this.introspectedClass = introspectedClass;
   }

   /**
    * Return the underlying Class.
    */
   public final Class getIntrospectedClass() {
      return this.introspectedClass;
   }


   @Override
   public String getClassName() {
      return this.introspectedClass.getName();
   }

   @Override
   public boolean isInterface() {
      return this.introspectedClass.isInterface();
   }

   @Override
   public boolean isAnnotation() {
      return this.introspectedClass.isAnnotation();
   }

   @Override
   public boolean isAbstract() {
      return Modifier.isAbstract(this.introspectedClass.getModifiers());
   }

   @Override
   public boolean isConcrete() {
      return !(isInterface() || isAbstract());
   }

   @Override
   public boolean isFinal() {
      return Modifier.isFinal(this.introspectedClass.getModifiers());
   }

   @Override
   public boolean isIndependent() {
      return (!hasEnclosingClass() ||
            (this.introspectedClass.getDeclaringClass() != null &&
                  Modifier.isStatic(this.introspectedClass.getModifiers())));
   }

   @Override
   public boolean hasEnclosingClass() {
      return (this.introspectedClass.getEnclosingClass() != null);
   }

   @Override
   public String getEnclosingClassName() {
      Class enclosingClass = this.introspectedClass.getEnclosingClass();
      return (enclosingClass != null ? enclosingClass.getName() : null);
   }

   @Override
   public boolean hasSuperClass() {
      return (this.introspectedClass.getSuperclass() != null);
   }

   @Override
   public String getSuperClassName() {
      Class superClass = this.introspectedClass.getSuperclass();
      return (superClass != null ? superClass.getName() : null);
   }

   @Override
   public String[] getInterfaceNames() {
      Class[] ifcs = this.introspectedClass.getInterfaces();
      String[] ifcNames = new String[ifcs.length];
      for (int i = 0; i < ifcs.length; i++) {
         ifcNames[i] = ifcs[i].getName();
      }
      return ifcNames;
   }

   @Override
   public String[] getMemberClassNames() {
      LinkedHashSet memberClassNames = new LinkedHashSet(4);
      for (Class nestedClass : this.introspectedClass.getDeclaredClasses()) {
         memberClassNames.add(nestedClass.getName());
      }
      return StringUtils.toStringArray(memberClassNames);
   }

}

3.#Annotation相关

3.1 AnnotatedTypeMetadata是AnnotatedElement的封装

Spring笔记-Metadata_第3张图片

其可以获取某个注解的信息

3.2 AnnotationMetadata
主要对Class相关的多个注解进行获取和判断

Spring笔记-Metadata_第4张图片

先对其有一个基本的认识

你可能感兴趣的:(Spring笔记-Metadata)