Java自定义注解--注解套注解--注解解析

本文详细介绍了如何在Java中使用自定义注解来封装数据,并通过反射机制解析注解内容,实现前后端数据交互。文章通过具体示例展示了自定义注解的定义和使用方法。

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

Java自定义注解

  • 在公司的项目遇到了自定义注解的问题.需求是:在注解中定义一些数据,这些数据有共同的格式,比如都有name,description,type这些字段.在后台解析出这些数据,发送给前端.
  • 我第一时间想到的是定义一个对象,对象中的属性对应这些字段,在注解中定义这个对象的一维数组.后来查阅资料发现注解中的属性返回值只局限于原始类型,字符串,枚举,注解,或以上类型构成的一维数组.然后就想到了注解套注解的方式,具体如下:
//定义子注解
@Target({ElementType.METHOD,ElementType.TYPE})
//Target是定义注解的应用范围,ElementType.METHOD是指应用在方法上,ElementType.TYPE是指应用在类和接口上
@Retention(RetentionPolicy.RUNTIME)
//Retention表示需要在什么级别保存该注解信息,RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息
public @interface Param {
    String name();
    String description();
    String type();
    String inputType();
}
//这个注解比较简单,就是子注解的一维数组
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ParamUI {
    Param[] anno();
}

下面就是实例代码,main方法中进行的是解析注解中的数据

@ParamUI(anno = {
        @Param(
                name = "selectName",
                description = "时间段选择",
                type = "selectBox",
                inputType = "String"
        ),
        @Param(
                name = "radioName",
                description = "数值选择",
                type = "radio",
                inputType = "String")
        ,
        @Param(
                name = "checkBoxName",
                description = "工况选择",
                type = "checkBox",
                inputType = "String")
}
)
public class FilterCalc {
    public static void main(String[] args) {
    	//获取该对象的字节码
        Class c = FilterCalc.class;
        //拿到该对象上的注解
        ParamUI annotation = (ParamUI) c.getAnnotation(ParamUI.class);
        //获取该注解中的内容,就是子注解的一维数组
        Param[] anno = annotation.anno();
        //循环读取子注解中的内容
        for (Param param : anno) {
            String name = param.name();
            System.out.print(name+" ");
            String description = param.description();
            System.out.print(description+" ");
            String inputType = param.inputType();
            System.out.print(inputType+" ");
            String type = param.type();
            System.out.print(type);
            //换行
            System.out.println();
        }
    }
}

完美!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值