自定义 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
转载于:https://www.cnblogs.com/telwanggs/p/7418873.html
自定义 Java Annotation ,读取注解值相关推荐
- 3. 自定义Java编译时注解处理器
1. 絮絮叨叨 要么是注解跟我有仇,要么是公司配发的笔记本跟我有仇,要么是因为心急吃不了热豆腐 痛定思痛:从头开始,新建一个Java项目,实现一个超级简单的注解@Hello 通过获取被标识类的类名(原 ...
- java annotation list_Java 注解 (Annotation)你可以这样学
注解语法 因为平常开发少见,相信有不少的人员会认为注解的地位不高.其实同 classs 和 interface 一样,注解也属于一种类型.它是在 Java SE 5.0 版本中开始引入的概念. 注解的 ...
- java 动态设置 注解值_动态修改注解(annotation)值
项目中用到了 @JsonIgnore 注解,因为类中有个详细信息, 这个详细信息在返给前端列表时用不到,只在查看详情时才会用到.所以详情字段加上了@JsonIgnore,它的默认值是true. 所以在 ...
- 自定义Java annotation及解析和使用
用@interface定义一个annotation: package annotationTest;import java.lang.annotation.*;@Documented @Target( ...
- Java Annotation(注解)使用教程
Java Annotation(注解)使用教程 1 什么是注解 2 注解的使用语法 2.1 内置注解介绍以及使用 @Override @Deprecated @SuppressWarnings @Sa ...
- java运行时读取注解_Java自定义注解和运行时靠反射获取注解
转:1.Annotation的工作原理: JDK5.0中提供了注解的功能,允许开发者定义和使用自己的注解类型.该功能由一个定义注解类型的语法和描述一个注解声明的语法,读取注解的API,一个使用注解修饰 ...
- 标记注解 java_【java】细说 JAVA中 标注 注解(annotation)
Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能. 注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用 下面我们来详细说说这个注解,到底是怎么 ...
- Java中的注解(Annotation)处理器解析
Java中的注解(Annotation)是一个很神奇的东西,特别现在有很多Android库都是使用注解的方式来实现的.一直想详细了解一下其中的原理.很有幸阅读到一篇详细解释编写注解处理器的文章.本文的 ...
- java annotation list_[Java5新特性]Annotation注解
Annotation概述 Annotation是JDK 5.0以后提供对元数据的支持,可以在编译.加载和运行时被读取,并执行相应的处理.所谓Annotation就是提供了一种为程序元素设置元数据的方法 ...
最新文章
- 数组的拼接合并 numpy
- 【Hihocoder - offer编程练习赛86 - C】跳数游戏(STLset或map预处理,dp)
- thymeleaf 的 th:onclick js方法入参
- TensorFlow中RNN实现的正确打开方式(转)
- Android自定义View【实战教程】1⃣️----attrs.xml详解
- python取整数部分语句_pythonlogi中不使用条件语句的整数取整
- 《码出高效:Java 开发手册》“码” 出高效的同时编写出高质量的代“码”。
- postgresql 窗口函数
- 拉普拉斯方程(Laplace's equation)-- 更新中
- google退出中国市场——g迷怎么办
- ROS中gazebo工具学习(使用gazebo加载机器人模型)
- 俞敏洪沉默,新东方落泪
- 赛码网刷题python
- 佳能Canon MF9200 Series 一体机驱动
- IIC OLED笔记
- JAVA面试大全(持续更新中...)
- 李开复:人工智能对人类真正的威胁是什么?
- python时区、时差、时间差转换——datetime.timedelta类介绍
- 车联网发展的昨天和明天
- 服务器系统日志事件id41,系统莫名重启,系统相关日志中出现事件ID:41,1001,6008,请问这是什么原因导致...
热门文章
- ModelCoder中的超密时间模型
- matlab思考,关于Matlab编程的思考(待续)
- vb杨辉三角代码编写_「二次开发」——基于VB.NET的NX UG软件二次开发基础
- (83)建立时间与保持时间时序分析技巧
- (135)FPGA面试题-介绍FPGA的速度等级与温度等级
- (03)System Verilog 通用总线激励驱动方法
- spring事务管理器的作用_【面试必问】Spring中的事务管理详解
- DMA讲解《一》(清华大学)
- java枚举对象作用_浅析Java编程中枚举类型的定义与使用
- C++中函数重载、缺省参数及命名空间