自定义 Java Annotation ,读取注解值
1. 首先是自定义注解:
- package cn.veji.hibernate.po;
- import java.lang.annotation.ElementType;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.lang.annotation.Target;
- @Target(ElementType.METHOD)
- @Retention(RetentionPolicy.RUNTIME)
- public @interface Privilege {
- String[] value();
- }
2.定义使用注解类:
- package cn.veji.hibernate.po;
- package cn.veji.hibernate.po;
- public class TestPrivilege {
- @Privilege( { "a" })
- public void a() {
- }
- @Privilege( { "b" })
- public void b() {
- }
- @Privilege( { "c" })
- public void c() {
- }
- }
3.读取注解值帮助类:
- package cn.veji.hibernate.po;
- package cn.veji.hibernate.test;
- import java.lang.annotation.Annotation;
- import java.lang.reflect.Method;
- import java.util.HashMap;
- import java.util.Map;
- import cn.veji.hibernate.po.Privilege;
- import cn.veji.hibernate.po.TestPrivilege;
- public class AnnotationUtil {
- public static AnnotationUtil anno = null;
- public static AnnotationUtil getInstance() {
- if (anno == null) {
- anno = new AnnotationUtil();
- }
- return anno;
- }
- /**
- * 读取注解值
- *
- * @param annotationClasss 处理Annotation类名称
- * @param annotationField 处理Annotation类属性名称
- * @param className 处理Annotation的使用类名称
- * @return
- * @throws Exception
- */
- @SuppressWarnings("all")
- public Map<String, String> loadVlaue(Class annotationClasss,
- String annotationField, String className) throws Exception {
- System.out.println("处理Annotation类名称 === "+annotationClasss.getName());
- System.out.println("处理Annotation类属性名称 === "+annotationField);
- System.out.println("处理Annotation的调用类名称 === "+className);
- Map<String, String> map = new HashMap<String, String>();
- Method[] methods = Class.forName(className).getDeclaredMethods();
- for (Method method : methods) {
- if (method.isAnnotationPresent(annotationClasss)) {
- Annotation p = method.getAnnotation(annotationClasss);
- Method m = p.getClass()
- .getDeclaredMethod(annotationField, null);
- String[] values = (String[]) m.invoke(p, null);
- for (String key : values) {
- System.out.println("注解值 === " + key);
- map.put(key, key);
- }
- }
- }
- System.out.println("map数量 === " + map.size());
- return map;
- }
- public static void main(String[] args) throws Exception {
- AnnotationUtil.getInstance().loadVlaue(Privilege.class, "value",
- TestPrivilege.class.getName());
- }
- }
4.执行结果:
- 处理Annotation类名称 === cn.veji.hibernate.po.Privilege
- 处理Annotation类属性名称 === value
- 处理Annotation的调用类名称 === cn.veji.hibernate.po.TestPrivilege
- 注解值 === c
- 注解值 === a
- 注解值 === b
- map数量 === 3
自定义 Java Annotation ,读取注解值的更多相关文章
- [置顶] 自定义java Annotation快速入门与提高
我们先来看看一个简单的注解类定义 import java.lang.annotation.Documented; import java.lang.annotation.Retention; impo ...
- 自定义Java annotation
1.目录结构: 2.pom文件: Simple exmple: package com.yuan.simple; import java.lang.annotation.Retention; impo ...
- 自定义Java注解(annotation)
https://www.imooc.com/learn/456 笔记 Java从1.5开始引进注解. 首先解决一个问题,为什么要学习Java注解? 1.看懂别人写的代码,尤其是框架的代码 2.可以是 ...
- java反射机制获取自定义注解值和方法
由于工作需求要应用到java反射机制,就做了一下功能demo想到这些就做了一下记录 这个demo目的是实现动态获取到定时器的方法好注解名称,废话不多说了直接上源码 1.首先需要自定义注解类 /** * ...
- 【java】细说 JAVA中 标注 注解(annotation)
Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能.注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用 下面我们来详细说说这个注解,到底是怎么一 ...
- java中的注解(Annotation)
转载:https://segmentfault.com/a/1190000007623013 简介 注解,java中提供了一种原程序中的元素关联任何信息.任何元素的途径的途径和方法. 注解是那些插入到 ...
- java中的注解详解和自定义注解
一.java中的注解详解 1.什么是注解 用一个词就可以描述注解,那就是元数据,即一种描述数据的数据.所以,可以说注解就是源代码的元数据.比如,下面这段代码: @Override public Str ...
- Java Annotation 注解
java_notation.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin ...
- 深入理解Java:注解(Annotation)--注解处理器
如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处 ...
随机推荐
- for in、for和EnumerateObjectsUsingBlock遍历的区别
1.对于集合中对象数很多的情况下,for in 的遍历速度非常之快,但小规模的遍历并不明显(还没普通for循环快) 2. 如果在for in 循环里,对这个数组进行了修改的话,无论是增,删,修改数组元 ...
- C# 插件热插拔 .NET:何时应该 “包装异常”? log4.net 自定义日志文件名称
C# 插件热插拔 所谓热插拔就是插件可以 在主程序不重新启动的情况直接更新插件, 网上有很多方案: https://www.cnblogs.com/happyframework/p/3405811 ...
- C# 最基本的涉及模式(单例模式) C#种死锁:事务(进程 ID 112)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务,解决方案: C#关闭应用程序时如何关闭子线程 C#中 ThreadStart和ParameterizedThreadStart区别
C# 最基本的涉及模式(单例模式) //密封,保证不能继承 public sealed class Xiaohouye { //私有的构造函数,保证外部不能实例化 private ...
- 简单区分iphone和ipad的宏定义
在公共头文件里作例如以下定义: #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 使用时: if( IS_I ...
- HDMI信号解析
参考资料:http://blog.sina.com.cn/s/blog_6cfd49b00102w00i.html: http://blog.csdn.net/gtkknd/article/detai ...
- JSON-JSON字符串转换成JSON对象、JSON对象数组、java实体类以及保存到List列表中
处理JSON字符串时,一直出错,写个样例后发现原来是没有弄清楚数据的格式问题. 实现的是 JSONString 转换成java对象 或是 list列表 实例类 News package lyx.ent ...
- iOS DeepLinkKit使用简单介绍
Update: 2017.04.08 添加了使用iOS DeepLinkKit使用Universal Links的部分 ---------------------------------------- ...
- shell 爬虫 从日志分析到数据采集与分析
[root@VM_61_158_centos ~]# curl http://ip.chinaz.com/220.112.233.179 |grep -e Whwtdhalf.*span.*span. ...
- 修改数据表的字符集为utf8mb4
修改数据表的字符集为utf8mb4
- bzoj2709: [Violet 1]迷宫花园
二分答案,spfa check就行了. gb题卡精度. #include<cstdio> #include<iostream> #include<cstring> ...