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();
}
}
}
完美!!