1. 首先是自定义注解:

  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.定义使用注解类:

  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.读取注解值帮助类:

  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.执行结果:

    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

自定义 Java Annotation ,读取注解值的更多相关文章

  1. [置顶] 自定义java Annotation快速入门与提高

    我们先来看看一个简单的注解类定义 import java.lang.annotation.Documented; import java.lang.annotation.Retention; impo ...

  2. 自定义Java annotation

    1.目录结构: 2.pom文件: Simple exmple: package com.yuan.simple; import java.lang.annotation.Retention; impo ...

  3. 自定义Java注解(annotation)

    https://www.imooc.com/learn/456  笔记 Java从1.5开始引进注解. 首先解决一个问题,为什么要学习Java注解? 1.看懂别人写的代码,尤其是框架的代码 2.可以是 ...

  4. java反射机制获取自定义注解值和方法

    由于工作需求要应用到java反射机制,就做了一下功能demo想到这些就做了一下记录 这个demo目的是实现动态获取到定时器的方法好注解名称,废话不多说了直接上源码 1.首先需要自定义注解类 /** * ...

  5. 【java】细说 JAVA中 标注 注解(annotation)

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

  6. java中的注解(Annotation)

    转载:https://segmentfault.com/a/1190000007623013 简介 注解,java中提供了一种原程序中的元素关联任何信息.任何元素的途径的途径和方法. 注解是那些插入到 ...

  7. java中的注解详解和自定义注解

    一.java中的注解详解 1.什么是注解 用一个词就可以描述注解,那就是元数据,即一种描述数据的数据.所以,可以说注解就是源代码的元数据.比如,下面这段代码: @Override public Str ...

  8. Java Annotation 注解

    java_notation.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin ...

  9. 深入理解Java:注解(Annotation)--注解处理器

    如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处 ...

随机推荐

  1. C#如何使用右下角托盘图标notifyIcon

    1 拖放一个NotifyIcon控件,并设置图标,还有显示的文字   2 双击这个控件,即当最小化了主窗体,然后双击这个右下角图标的时候,要显示主窗体(大部分程序的用户体验都是这样干的,比如QQ,双击 ...

  2. C#中的函数式编程:递归与纯函数(二) 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面

    C#中的函数式编程:递归与纯函数(二)   在序言中,我们提到函数式编程的两大特征:无副作用.函数是第一公民.现在,我们先来深入第一个特征:无副作用. 无副作用是通过引用透明(Referential ...

  3. 黑马day13 分页思路&amp;实现

    分页的总体思想: 分页包含什么: 1.当前页,每页显示的记录数,总的记录数,总的页码,集合List存放的是JavaBean,首页, 尾页,上一页,下一页 传递的參数:当前页,每页显示的记录数.这两个本 ...

  4. hdu 5361 2015多校联合训练赛#6 最短路

    In Touch Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total ...

  5. 下载的php_yal.dll文件添加到php的ext

    下载的php_yal.dll文件添加到php的ext http://pecl.php.net/package/yaf/3.0.6/windows yaf. use_namespace=1 ;;exte ...

  6. 【NOIP1999】【Codevs 1046】旅行家的预算

    http://codevs.cn/problem/1046/ Solution: 贪心,如果当前油价很低,它就比起当前剩余油的价还低就可以替换,并且每次加满,最后把剩的油卖掉即可 油价用单调链表(不知 ...

  7. 今天要查一下,如果没有密保手机的号码在使用,怎么更换qq的密保手机

    本来我是想是使用284来作为foxmail的一个记事本账号,但是需要验证130的手机,这是以前使用的手机,现在不能接受该短信了,得反馈下.

  8. 第十周 Leetcode 546. Remove Boxes (HARD) 记忆化搜索

    Leetcode546 给定一个整数序列,每次删除其中连续相等的子序列,得分为序列长度的平方 求最高得分. dp方程如下: memo[l][r][k] = max(memo[l][r][k], dfs ...

  9. 杂项-Java:Druod Monitor

    ylbtech-杂项-Java:Druid Monitor 1.返回顶部 1. https://www.cnblogs.com/wanghuijie/p/druid_monitor.html 2. 2 ...

  10. NOIP 2011 Mayan游戏 大暴搜

    题目链接:https://www.luogu.org/problemnew/show/P1312 我的第一篇题解!! 当然感谢ZAGER 的提示,他的链接https://www.cnblogs.com ...