1. 首先是自定义注解:

Java代码  
  1. package cn.veji.hibernate.po;
  2. import java.lang.annotation.ElementType;
  3. import java.lang.annotation.Retention;
  4. import java.lang.annotation.RetentionPolicy;
  5. import java.lang.annotation.Target;
  6. @Target(ElementType.METHOD)
  7. @Retention(RetentionPolicy.RUNTIME)
  8. public @interface Privilege {
  9. String[] value();
  10. }

2.定义使用注解类:

Java代码  
  1. package cn.veji.hibernate.po;
  2. package cn.veji.hibernate.po;
  3. public class TestPrivilege {
  4. @Privilege( { "a" })
  5. public void a() {
  6. }
  7. @Privilege( { "b" })
  8. public void b() {
  9. }
  10. @Privilege( { "c" })
  11. public void c() {
  12. }
  13. }

3.读取注解值帮助类:

Java代码  
  1. package cn.veji.hibernate.po;
  2. package cn.veji.hibernate.test;
  3. import java.lang.annotation.Annotation;
  4. import java.lang.reflect.Method;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. import cn.veji.hibernate.po.Privilege;
  8. import cn.veji.hibernate.po.TestPrivilege;
  9. public class AnnotationUtil {
  10. public static AnnotationUtil anno = null;
  11. public static AnnotationUtil getInstance() {
  12. if (anno == null) {
  13. anno = new AnnotationUtil();
  14. }
  15. return anno;
  16. }
  17. /**
  18. * 读取注解值
  19. *
  20. * @param annotationClasss 处理Annotation类名称
  21. * @param annotationField 处理Annotation类属性名称
  22. * @param className 处理Annotation的使用类名称
  23. * @return
  24. * @throws Exception
  25. */
  26. @SuppressWarnings("all")
  27. public Map<String, String> loadVlaue(Class annotationClasss,
  28. String annotationField, String className) throws Exception {
  29. System.out.println("处理Annotation类名称  === "+annotationClasss.getName());
  30. System.out.println("处理Annotation类属性名称  === "+annotationField);
  31. System.out.println("处理Annotation的调用类名称  === "+className);
  32. Map<String, String> map = new HashMap<String, String>();
  33. Method[] methods = Class.forName(className).getDeclaredMethods();
  34. for (Method method : methods) {
  35. if (method.isAnnotationPresent(annotationClasss)) {
  36. Annotation p = method.getAnnotation(annotationClasss);
  37. Method m = p.getClass()
  38. .getDeclaredMethod(annotationField, null);
  39. String[] values = (String[]) m.invoke(p, null);
  40. for (String key : values) {
  41. System.out.println("注解值 === " + key);
  42. map.put(key, key);
  43. }
  44. }
  45. }
  46. System.out.println("map数量  === " + map.size());
  47. return map;
  48. }
  49. public static void main(String[] args) throws Exception {
  50. AnnotationUtil.getInstance().loadVlaue(Privilege.class, "value",
  51. TestPrivilege.class.getName());
  52. }
  53. }

4.执行结果:

Java代码  
  1. 处理Annotation类名称  === cn.veji.hibernate.po.Privilege
  2. 处理Annotation类属性名称  === value
  3. 处理Annotation的调用类名称  === cn.veji.hibernate.po.TestPrivilege
  4. 注解值 === c
  5. 注解值 === a
  6. 注解值 === b
  7. map数量  === 3

转载于:https://www.cnblogs.com/telwanggs/p/7418873.html

自定义 Java Annotation ,读取注解值相关推荐

  1. 3. 自定义Java编译时注解处理器

    1. 絮絮叨叨 要么是注解跟我有仇,要么是公司配发的笔记本跟我有仇,要么是因为心急吃不了热豆腐 痛定思痛:从头开始,新建一个Java项目,实现一个超级简单的注解@Hello 通过获取被标识类的类名(原 ...

  2. java annotation list_Java 注解 (Annotation)你可以这样学

    注解语法 因为平常开发少见,相信有不少的人员会认为注解的地位不高.其实同 classs 和 interface 一样,注解也属于一种类型.它是在 Java SE 5.0 版本中开始引入的概念. 注解的 ...

  3. java 动态设置 注解值_动态修改注解(annotation)值

    项目中用到了 @JsonIgnore 注解,因为类中有个详细信息, 这个详细信息在返给前端列表时用不到,只在查看详情时才会用到.所以详情字段加上了@JsonIgnore,它的默认值是true. 所以在 ...

  4. 自定义Java annotation及解析和使用

    用@interface定义一个annotation: package annotationTest;import java.lang.annotation.*;@Documented @Target( ...

  5. Java Annotation(注解)使用教程

    Java Annotation(注解)使用教程 1 什么是注解 2 注解的使用语法 2.1 内置注解介绍以及使用 @Override @Deprecated @SuppressWarnings @Sa ...

  6. java运行时读取注解_Java自定义注解和运行时靠反射获取注解

    转:1.Annotation的工作原理: JDK5.0中提供了注解的功能,允许开发者定义和使用自己的注解类型.该功能由一个定义注解类型的语法和描述一个注解声明的语法,读取注解的API,一个使用注解修饰 ...

  7. 标记注解 java_【java】细说 JAVA中 标注 注解(annotation)

    Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能. 注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用 下面我们来详细说说这个注解,到底是怎么 ...

  8. Java中的注解(Annotation)处理器解析

    Java中的注解(Annotation)是一个很神奇的东西,特别现在有很多Android库都是使用注解的方式来实现的.一直想详细了解一下其中的原理.很有幸阅读到一篇详细解释编写注解处理器的文章.本文的 ...

  9. java annotation list_[Java5新特性]Annotation注解

    Annotation概述 Annotation是JDK 5.0以后提供对元数据的支持,可以在编译.加载和运行时被读取,并执行相应的处理.所谓Annotation就是提供了一种为程序元素设置元数据的方法 ...

最新文章

  1. 数组的拼接合并 numpy
  2. 【Hihocoder - offer编程练习赛86 - C】跳数游戏(STLset或map预处理,dp)
  3. thymeleaf 的 th:onclick js方法入参
  4. TensorFlow中RNN实现的正确打开方式(转)
  5. Android自定义View【实战教程】1⃣️----attrs.xml详解
  6. python取整数部分语句_pythonlogi中不使用条件语句的整数取整
  7. 《码出高效:Java 开发手册》“码” 出高效的同时编写出高质量的代“码”。
  8. postgresql 窗口函数
  9. 拉普拉斯方程(Laplace's equation)-- 更新中
  10. google退出中国市场——g迷怎么办
  11. ROS中gazebo工具学习(使用gazebo加载机器人模型)
  12. 俞敏洪沉默,新东方落泪
  13. 赛码网刷题python
  14. 佳能Canon MF9200 Series 一体机驱动
  15. IIC OLED笔记
  16. JAVA面试大全(持续更新中...)
  17. 李开复:人工智能对人类真正的威胁是什么?
  18. python时区、时差、时间差转换——datetime.timedelta类介绍
  19. 车联网发展的昨天和明天
  20. 服务器系统日志事件id41,系统莫名重启,系统相关日志中出现事件ID:41,1001,6008,请问这是什么原因导致...

热门文章

  1. ModelCoder中的超密时间模型
  2. matlab思考,关于Matlab编程的思考(待续)
  3. vb杨辉三角代码编写_「二次开发」——基于VB.NET的NX UG软件二次开发基础
  4. (83)建立时间与保持时间时序分析技巧
  5. (135)FPGA面试题-介绍FPGA的速度等级与温度等级
  6. (03)System Verilog 通用总线激励驱动方法
  7. spring事务管理器的作用_【面试必问】Spring中的事务管理详解
  8. DMA讲解《一》(清华大学)
  9. java枚举对象作用_浅析Java编程中枚举类型的定义与使用
  10. C++中函数重载、缺省参数及命名空间