Spring笔记-Metadata

1.Metadata概念

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


其在Spring的Condition接口中有用到

来看一下ClassMetadata的接口

基本是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<String> memberClassNames = new LinkedHashSet<String>(4);
      for (Class<?> nestedClass : this.introspectedClass.getDeclaredClasses()) {
         memberClassNames.add(nestedClass.getName());
      }
      return StringUtils.toStringArray(memberClassNames);
   }

}

3.#Annotation相关

3.1 AnnotatedTypeMetadata是AnnotatedElement的封装

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

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

先对其有一个基本的认识

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,264评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,222评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,049评论 25 709
  • 昨天看到周作业,想着今天要去瑜伽馆,然后作业就留着今天做了。瑜伽课上跟着老师做了差不多10分钟冥想。好像也没有想什...
    透明的橙阅读 1,243评论 1 0
  • 身边女性朋友关于跑步问得最多的两个问题。一是跑步腿会变粗吗,二是跑步会让胸变小吗? 之前我们谈论了在做好拉伸的前提...
    猛虎哥阅读 5,559评论 2 1

友情链接更多精彩内容