• Java使用反射获取注解信息的简介说明


    转自:

    Java使用反射获取注解信息的简介说明

    下文笔者讲述使用java反射获取注解信息的方法分享,如下所示:

    注解简介说明

    注解可以理解为java代码的一个注释,注解本身不起任何作用,它需要借助反射为类做一些扩展功能
    例:注解的使用

    //TestClass上使用了注解@MyAnnotation
    @MyAnnotation(name="java",value="java265.com")
    public class TestClass {
    }
    
    //定义注解
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    public @interface MyAnnotation {
      public String name();
      public String value();
    }
    

    java访问注解的示例分享

    Class aClass = TestClass.class;
    Annotation[] annotations = aClass.getAnnotations();
    for(Annotation annotation : annotations){
        if(annotation instanceof MyAnnotation){
            MyAnnotation myAnnotation = (MyAnnotation) annotation;
            System.out.println("name: " + myAnnotation.name());
            System.out.println("value: " + myAnnotation.value());
        }
    } 
    

    方法注解

    public class TestClass {
      @MyAnnotation(name="methoName",  value = "this is method")
      public void testFun(){}
    }
     
    Method method = ... //获取方法对象
    Annotation[] annotations = method.getDeclaredAnnotations();
    for(Annotation annotation : annotations){
        if(annotation instanceof MyAnnotation){
            MyAnnotation myAnnotation = (MyAnnotation) annotation;
            System.out.println("name: " + myAnnotation.name());
            System.out.println("value: " + myAnnotation.value());
        }
    }
    

    参数注解

     public class TestClass {
      public static void testFun(
            @MyAnnotation(name="aName", value="aValue") String parameter){
      }
    }
    
    //使用Method对象来访问方法参数注解
    
    Method method = ... //获取方法对象
    Annotation[][] parameterAnnotations = method.getParameterAnnotations();
    Class[] parameterTypes = method.getParameterTypes();
    int i=0;
    for(Annotation[] annotations : parameterAnnotations){
      Class parameterType = parameterTypes[i++];
      for(Annotation annotation : annotations){
        if(annotation instanceof MyAnnotation){
            MyAnnotation myAnnotation = (MyAnnotation) annotation;
            System.out.println("param: " + parameterType.getName());
            System.out.println("name : " + myAnnotation.name());
            System.out.println("value: " + myAnnotation.value());
        }
      }
    }
    ---------------------
    注意事项:
        Method.getParameterAnnotations()方法返回一个注解类型的二维数组
    

    变量注解

    public class TestClass {
      @MyAnnotation(name="someName",  value = "Hello World")
      public String myField = null;
    }
    
    Field field = ... //获取方法对象
    Annotation[] annotations = field.getDeclaredAnnotations();
    for(Annotation annotation : annotations){
     if(annotation instanceof MyAnnotation){
     MyAnnotation myAnnotation = (MyAnnotation) annotation;
     System.out.println("name: " + myAnnotation.name());
     System.out.println("value: " + myAnnotation.value());
     }
    }
  • 相关阅读:
    Maven常见面试题总结
    动态规划三:区间动态规划(19182+11078+洛谷P4170+力扣877)
    1-k8s1.23.6-底座搭建-基于docker
    MySQL事务隔离级别详解
    新闻分析报告:Active Directory 证书服务是企业网络的一大安全盲点
    Ethersacn的交易数据是什么样的(2)
    Mysql---第六篇
    边缘计算技术
    HTTP的本质理解
    华为机试 - 租车骑绿岛
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/126673072