从JDK1.5之后,注解在各大框架上得到了广泛的应用。下面这个例子中,你可以判断一个类或者方法或者字段上有没有注解,以及怎么获取上面的注解值。话不多说,代码如下:

AnnotationTest01.java

package com.zkn.newlearn.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.PARAMETER})
public @interface AnnotationTest01 {String color();
}

AnnotationTest02.java

package com.zkn.newlearn.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface AnnotationTest02 {String getUserName();
}

AnnotationTest04.java

package com.zkn.newlearn.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.FIELD})
public @interface AnnotationTest04 {String getAddress();
}

AnnotationTest03.java

package com.zkn.newlearn.annotation;import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;/*** 测试Annotation* @author zkn**/
@AnnotationTest02(getUserName="zhangsan")
public class AnnotationTest03 {@AnnotationTest01(color="red")public static String testColor(String color){System.out.println(color);return color;}@AnnotationTest04(getAddress="北京市海淀区")String address;public static void main(String[] args) {//获取方法上的注解值Method[] methods = AnnotationTest03.class.getDeclaredMethods();if(methods != null){for(Method method : methods){AnnotationTest01 annotation = method.getAnnotation(AnnotationTest01.class);if(annotation == null)continue;Method[] me = annotation.annotationType().getDeclaredMethods();for(Method meth : me){try {String color = (String) meth.invoke(annotation,null);System.out.println(color);} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}}}//获取类上的注解值AnnotationTest02 anno = AnnotationTest03.class.getAnnotation(AnnotationTest02.class);if(anno != null){Method[] met = anno.annotationType().getDeclaredMethods();for(Method me : met ){if(!me.isAccessible()){me.setAccessible(true);}try {System.out.println(me.invoke(anno, null));} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}}//获取字段上的注解值AnnotationTest03 noon = new AnnotationTest03();Field[] field = AnnotationTest03.class.getDeclaredFields();if(field != null){for(Field fie : field){if(!fie.isAccessible()){fie.setAccessible(true);}AnnotationTest04 annon = fie.getAnnotation(AnnotationTest04.class);Method[] meth = annon.annotationType().getDeclaredMethods();for(Method me : meth){if(!me.isAccessible()){me.setAccessible(true);}try {//给字段重新赋值fie.set(noon, me.invoke(annon, null));System.out.println(fie.get(noon));} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}}}}
}

利用反射获取类或者方法或者字段上的注解的值相关推荐

  1. java 获取类的注解_Java 自定义注解通过反射获取类、方法、属性上的注解

    反射 JAVA中的反射是运行中的程序检查自己和软件运行环境的能力,它可以根据它发现的进行改变.通俗的讲就是反射可以在运行时根据指定的类名获得类的信息. 注解的定义 注解通过 @interface 关键 ...

  2. Java反射获取类,方法

    获取Class类的实例 若已知具体的类,通过类的class属性获取,该方法最为安全可靠,程序性能最高. Class clazz = Person.class; 已知某个类的实例,调用该实例的getCl ...

  3. php 反射类 解析注释,php反射获取类和方法中的注释

    通过php中的反射机制,获取该类的文档注释,再通过获取其所有的方法,获取方法的注释 所用到的主要类及其方法 ReflectionClass ReflectionClass::getDocComment ...

  4. 通过反射获取类的所有属性和方法

    通过反射获取类的所有属性和方法  1    private void button1_Click(object sender, EventArgs e)  2        {  3          ...

  5. java 获取类方法_Java之反射机制三:获取类的方法

    一.实体类BigDog.java package reflex; public class BigDog extends Dog { private Integer age; public Strin ...

  6. 反射获取类_新人也能看懂?如何使用 Java 反射?反射的用法及案例

    · 简介 Java Reflection,称为 Java 反射,是Java基础部分的一个比较难的点.Reflection(反射)是被视为动态语言的关键,通过反射机制,我们可以在运行时(runtime) ...

  7. Atitit利用反射获取子类 集合 以及继承树

    Atitit利用反射获取子类 集合 以及继承树 想从父类往下找子类的确是不可能的,要知道只要类不是final的话谁都有继承它的自由不需要事前通知父类. Eclipse实现不是重父类开始找而是重子类往回 ...

  8. 【Groovy】编译时元编程 ( ASTTransformation#visit 方法中访问 Groovy 类、方法、字段、属性 | 完整代码示例及进行编译时处理的编译过程 )

    文章目录 一.ASTTransformation#visit 方法中访问 Groovy 类.方法.字段.属性 二.完整代码示例及进行编译时处理的编译过程 1.Groovy 脚本 Groovy.groo ...

  9. Java知识点总结(反射-获取类的信息)

    Java知识点总结(反射-获取类的信息) @(Java知识点总结)[Java, 反射] 应用反射的API,获取类的信息(类的名字.属性.方法.构造器等) import java.lang.reflec ...

最新文章

  1. java怎么清空表释放空间_Linux 删除文件未释放空间问题处理,下清空或删除大文件...
  2. Java SE、Java EE、Java ME基本区别
  3. 设计模式学习 - 工厂模式
  4. 在pytorch中自定义dataset读取数据2021-1-8学习笔记
  5. 解读腾讯极速高清AR-SR的画质改善机制
  6. 修改caffe源码--支持多标签--关键点检测
  7. BeanFactoryPostProcessor接口(容器后处理器)
  8. sublime基本命令和使用
  9. 《JAVA与模式》— 原型模式
  10. java实现psd格式图片读入
  11. 爬虫项目:大麦网分析
  12. html 拼图游戏,HTML5人物拼图游戏
  13. 海贼王热血航线正在连接服务器,《航海王热血航线》登录异常解决方法 无法进入怎么解决...
  14. SLAM、SFM、MVG与MVS的区别和联系
  15. c语言参悟之旅,C语言参悟之旅
  16. 线性代数-思维导图(1)
  17. 纯免费≠零价值,揭秘兄弟会纯免费背后的内幕
  18. Linux新手之路 - date cal 命令
  19. MySQL 5.7.17 Group Relication(组复制)搭建手册【转】
  20. 计算机软件著作权登记简介

热门文章

  1. 自己动手写Docker系列 -- 4.1使用busybox创建容器
  2. 2 华为云闪付_教你区分信用卡刷卡、挥卡、插卡、云闪付等支付方式!
  3. layui table动态选中_微信炫酷炸啦!超视觉动态壁纸来了,还自带音效!
  4. 《Python神经网络编程》
  5. vv7无法启动显示发动机故障_发动机电控系统常见故障(发动机不能启动)的解决方法...
  6. OAuth2.0认证服务器之客户端相关配置
  7. 解决谷歌浏览器重复上传同一文件失败的问题
  8. 华为100万部鸿蒙,2019年Q4发布 华为100万部鸿蒙OS手机已开测
  9. Aix5.3安装Bash Shell环境
  10. vue ----axios