java反射获取注解上的参数值

本文档通过一个实例展示了如何利用Java的反射API来高效地获取类、字段以及方法上的注解信息。具体操作包括检查类是否包含特定注解、获取类注解的详细内容,以及遍历类的字段和方法,提取其上的@Excel注解,从而避免手动复制粘贴。这种方法对于处理大量带有注解的类非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景

最近写一个文档, 用到了一个导出类的属性释义, 但这些释义定义在导出类属性上的注解上, 如下

几十个字段好几个类, 一个个敲是自然万万不可,复制也太慢, 最好是写个代码一锅端!

方案

此处用到了反射, 还有java.lang下的两个方法

  •  java.lang.Package.isAnnotationPresent(Class<? extends Annotation> annotationClass) 
    • 如果指定类型的注释存在于此元素上,  方法返回true
  • java.lang.Package.getAnnotation(Class< A > annotationClass) 
    • 如果是该类型的注释, 方法返回该元素的该类型的注释

实例

实体类TestExportVO


import java.io.Serializable;
import java.lang.reflect.Field;

import cn.afterturn.easypoi.excel.annotation.Excel;
import io.swagger.annotations.ApiModel;
import lombok.Data;

@Data
@ApiModel(value = "TestExportVO")
public class TestExportVO implements Serializable {
    private static final long serialVersionUID = 1L;

    /** 姓名 */
    @Excel(name = "姓名", width = 15)
    private String studentName;

    /** 身份证号 */
    @Excel(name = "身份证号", width = 20)
    private String identityId;

    /** 学号 */
    @Excel(name = "学号", width = 20)
    private String studentId;

    /** 出生日期 */
    @Excel(name = "出生日期", width = 15)
    private String birthday;

    // ......
}

获取注释上的内容 

    public static void main(String[] args) {
        // 获取类注解
        if(TestExportVO.class.isAnnotationPresent(ApiModel.class)){
            System.out.println(TestExportVO.class.getAnnotation(ApiModel.class).value());
        }

        // 获取类变量注解:
        Field[] fields = TestExportVO.class.getDeclaredFields();
        for (Field f : fields) {
            if(f.isAnnotationPresent(Excel.class)){
                System.out.print(f.getAnnotation(Excel.class).name() + ",");
            }
        }
    }

运行如下

 

扩展

获取方法上的注解

 

        // 获取方法注解:
        Method[] methods = TestExportVO.class.getDeclaredMethods();
        for (Method m : methods) {
            if(m.isAnnotationPresent(Excel.class)){
                System.out.println(m.getAnnotation(Excel.class).name());
            }
        }

获取方法参数上的注解

 

        // 获取方法参数注解:
        Method[] methods2 = TestExportVO.class.getDeclaredMethods();
        for (Method m : methods2) {
            // 获取方法的所有参数
            Parameter[] parameters = m.getParameters();
            for (Parameter p : parameters) {
                // 判断是否存在注解
                if(p.isAnnotationPresent(Excel.class)){
                    System.out.println(p.getAnnotation(Excel.class).name());
                }
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑶山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值