(1)定义一个注解
package com.zyq.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 通用配置注解
* @author zyq
* @date 2019-04-22
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Desc {
String value ();
String remark () default "";
}
(2)定义一个类,类的属性上使用该注解
package com.zyq.consts;
import com.zyq.annotation.Desc;
/**
* 用户状态
* @author zyq
* @date 2019-04-22
*/
public class UserStatus {
@Desc(value = "正常")
public static int NORMAL = 1;
@Desc(value = "非正常", remark="该状态用户不能登录")
public static int ABNORMAL = 2;
}
(3)定义一个与注解属性对应的类
package com.zyq.vo;
public class FixedVo {
public int key;
public String value;
public String remark;
public int getKey() {
return key;
}
public String getValue() {
return value;
}
public String getRemark() {
return remark;
}
public void setKey(int key) {
this.key = key;
}
public void setValue(String value) {
this.value = value;
}
public void setRemark(String remark) {
this.remark = remark;
}
@Override
public String toString() {
return "FixedVo [key=" + key + ", value=" + value + ", remark="
+ remark + "]";
}
}
(4)创建一个注解工具类,提供解析注解的方法
package com.zyq.tools;
import java.lang.reflect.Field;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import com.zyq.annotation.Desc;
import com.zyq.vo.FixedVo;
public class AnnotationTool {
/**
* 获取打了Desc注解的字典属性列表
* @param t 类
* @return 字典属性列表
*/
public static <T> List<FixedVo> getFixedVoList(Class<T> c) {
if (c == null) {
return Collections.emptyList();
}
try {
T cls = c.newInstance();
Field[] fields = c.getDeclaredFields();
List<FixedVo> fixedVoList = new LinkedList<FixedVo>();
for (Field field : fields) {
Desc desc = field.getAnnotation(Desc.class);
if (desc != null) {
FixedVo vo = new FixedVo();
vo.setKey(field.getInt(cls));
vo.setValue(desc.value());
vo.setRemark(desc.remark());
fixedVoList.add(vo);
}
}
return fixedVoList;
} catch (Exception e) {
e.printStackTrace();
}
return Collections.emptyList();
}
}
(4)测试类代码
package com.zyq.tools.test;
import java.util.List;
import org.junit.Test;
import com.zyq.consts.UserStatus;
import com.zyq.tools.AnnotationTool;
import com.zyq.vo.FixedVo;
public class AnnotationToolTest {
@Test
public void getFixedVoListTest(){
List<FixedVo> voList = AnnotationTool.getFixedVoList(UserStatus.class);
for (FixedVo vo : voList) {
System.out.println(vo.toString());
}
}
}
(4)测试结果:
FixedVo [key=1, value=正常, remark=]
FixedVo [key=2, value=非正常, remark=该状态用户不能登录]