通过Java的反射机制拿到Annotation上的元数据
2016-06-13 09:08
435 查看
首先我们来说一说@Retention这个注解
这个注解表明了注解在类上的存在时间
@Retention可以设置三个值
1) RetentionPolicy.RUNTIME 编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。
2) RetentionPolicy.CLASS 编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。
3) RetentionPolicy.SOURCE 编译器要丢弃的注释。
RetentionPolicy 是一个枚举,里面有三个值,分别是SOURCE,CLASS,RUNTIME
然而只有在自定义注解中加入@Retention(RetentionPolicy.RUNTIME),才能让反射机制在程序运行的时候动态的获取到。
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.ANNOTATION_TYPE,ElementType.METHOD,ElementType.TYPE,ElementType.PACKAGE,ElementType.PARAMETER} )
@Documented
public @interface Result
{
String value();
String[] arrays();
}
通过如下的Java反射代码便可以拿到Annotation的元数据。
/**
* 反射获取Annotation
*
* Class<?> clazz = Class.forName("org.oa.test.JdbcTest");
*
* Method sayHello = clazz.getMethod("sayHello");
*
* Annotation[] annotations = clazz.getDeclaredAnnotations();
*
* Result result = (Result)annotations[0];
*
* System.out.println(result.arrays()[1]);
*
*
*/
这个注解表明了注解在类上的存在时间
@Retention可以设置三个值
1) RetentionPolicy.RUNTIME 编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。
2) RetentionPolicy.CLASS 编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。
3) RetentionPolicy.SOURCE 编译器要丢弃的注释。
RetentionPolicy 是一个枚举,里面有三个值,分别是SOURCE,CLASS,RUNTIME
然而只有在自定义注解中加入@Retention(RetentionPolicy.RUNTIME),才能让反射机制在程序运行的时候动态的获取到。
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.ANNOTATION_TYPE,ElementType.METHOD,ElementType.TYPE,ElementType.PACKAGE,ElementType.PARAMETER} )
@Documented
public @interface Result
{
String value();
String[] arrays();
}
通过如下的Java反射代码便可以拿到Annotation的元数据。
/**
* 反射获取Annotation
*
* Class<?> clazz = Class.forName("org.oa.test.JdbcTest");
*
* Method sayHello = clazz.getMethod("sayHello");
*
* Annotation[] annotations = clazz.getDeclaredAnnotations();
*
* Result result = (Result)annotations[0];
*
* System.out.println(result.arrays()[1]);
*
*
*/
相关文章推荐
- Java反射机制
- Spring MVC 入门示例讲解
- Java使用递归解决算法问题的实例讲解
- java中hashcode()和equals()的详解
- java PDF转WORD 只适合纯文本
- Java开发中的23种设计模式详解(转)
- Java 接口使用,工具类的分析
- eclipse 编码
- Spring MVC hello world example
- 开源 java CMS - FreeCMS2.4 栏目管理
- Eclipse插件开发 实现 复制 粘贴 剪切功能
- JAVA.SWT/JFace: JFace篇之MVC的表格、树和列表
- JDK的get请求方式
- JAVA.SWT/JFace: SWT中的事件模型/SWT常见的事件/SWT类所代表的事件常量/按键与其对应的常量表、KeyEvent事件比较、VerifyEvent事件比较
- GEF 和 eclipse 视图对象
- eclipse 查询结果 在新窗口中打开
- java中堆和栈的区别,递归和迭代的区别
- JAVA中calendar,date,string 的相互转换和详细用法
- struts2 action以及页面跳转
- 当我们说线程安全时,到底在说什么——Java进阶系列(二)