zoukankan      html  css  js  c++  java
  • 注解的本质 及 反射读取属性值


    注解的本质

    • 注解的本质即为接口,可通过以下代码验证:
    public class Test {
    
        public static void main(String[] args) {
            Class clazz=Anno02.class;
            System.out.println("是否是接口");
            System.out.println(clazz.isInterface());//true
            System.out.println("===========继承那个接口=============");
            Class[] cs=clazz.getInterfaces();
            for (Class class1 : cs) {
                System.out.println(class1);//java.lang.annotation.Annotation
            }
            System.out.println("==========方法============");
            /**
             * 反射时候看到的注解属性就是方法:
             * public abstract java.lang.String cn.edu.xcu.annotation.v2.Anno02.m()
             */
            Method[] ms=clazz.getMethods();
            for (Method method : ms) {
                System.out.println(method);
            }
            System.out.println("==========字段============");
            Field[] fs=clazz.getFields();
            for (Field field : fs) {
                System.out.println(field);
            }
        }
    
    }

    反射读取属性值

    • 意义:因为注解是让工具看的,我们框架要读取配置的属性值,要通过反射读取。
    • 定义
     @Retention(RetentionPolicy.RUNTIME)
     
    public @interface Anno {   public String attr1();   public String[] attr2(); }
    • 使用
    @Anno(attr1="dasb",attr2={"dasb1","dasb2"})
    public class A {
    }
    • 读取
    public class Test01 {
    public static void main(String[] args) {
      //1 找到像
      Class clazz=A.class;
      //2 找到注解出现位置
      Anno anno=(Anno) clazz.getDeclaredAnnotation(Anno.class); 
      System.out.println(anno.getClass());//jdk 代理
      //3 调用
      String attr1=anno.attr1();
      System.out.println(attr1);
      System.out.println("===================");
      String[] attr2=anno.attr2();
      for (String string : attr2) {
      System.out.println(string);
        }
      }
    }


  • 相关阅读:
    Delphi Excel 操作大全
    ThreadLocal类
    MyBatis实战总结
    MyBatis入门
    Mybatis逆向工程
    2020年全国高校计算机能力挑战赛初赛java组
    集合论基础
    命题与逻辑
    Redis技术概述
    UML图中6种箭头的含义
  • 原文地址:https://www.cnblogs.com/yuanshuai1026/p/11564243.html
Copyright © 2011-2022 走看看