本章目标
可以通过Java反射机制取得使用的全部Annotation
可以通过Java反射机制取得指定的Annotation
通过反射取得Annotation
如果要想让一个Annotation起作用,则必须结合反射机制。在Class类中存在以下几种与Annotation操作有关的方法
定义一个简单类
例如:现在有如下的类使用了系统的三个内建Annotation
public class SimpleBeanOne { @SuppressWarnings("unchecked") // 使用@SuppressWarnings的Annotation @Deprecated // 使用@Deprecated的Annotation @Override // 使用@Override的Annotation public String toString() { // 覆写toString()方法 return "chaoyi!!!" ; // 返回信息 } }
取得全部的Annotation
import java.lang.annotation.Annotation; import java.lang.reflect.Method; public class ReflectDemo01 { public static void main(String args[]) throws Exception {// 所有异常抛出 Class<?> c = null ; // 取得Class实例 c = Class.forName("SimpleBeanOne") ; Method toM = c.getMethod("toString"); // 取得toString()方法 Annotation an[] = toM.getAnnotations(); // 取得全部的Annotation for (Annotation a : an) { // foreach输出 System.out.println(a); // 直接输出信息 } } /* 结果: * @java.lang.Deprecated() * */ }
取得自定义的Annotation
以上的程序是取得了一个元素所声明的全部RUNTIME的Annotation,但是有时候需要取得的是某个指定的Annotation,所以此时在取得之前就必须进行明确的判断,使用isAnnotationPresent()方法进行判断。
定义一个RUNTIME的Annotation
import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(value=RetentionPolicy.RUNTIME) // 此Annotation在类执行时依然有效 public @interface MyDefaultAnnotationReflect { public String key() default "choayi" ; // 定义一个key变量,默认值为“choayi” public String value() default "阅谁问君诵,水落清香浮" ; // 定义一个value变量,默认值为“阅谁问君诵,水落清香浮” }
在类中使用Annotation
public class SimpleBeanTwo { @SuppressWarnings("unchecked") // 使用@SuppressWarnings的Annotation @Deprecated // 使用@Deprecated的Annotation @Override // 使用@Override的Annotation // 使用自定义的Annotation并设置两个属性内容 @MyDefaultAnnotationReflect(key = "baidu", value = "www.baidu.cn") public String toString() { // 覆写toString()方法 return "Hello Chaoyi!!!" ; // 返回信息 } }
取得指定的Annotation
import java.lang.reflect.Method; public class ReflectDemo02 { public static void main(String args[]) throws Exception { Class<?> c = null ; // 取得Class实例 c = Class.forName("SimpleBeanTwo") ; Method toM = c.getMethod("toString"); // 取得toString()方法 if (toM.isAnnotationPresent(MyDefaultAnnotationReflect.class)) { MyDefaultAnnotationReflect mda = null; // 声明自定义的Annotation对象 // 取得自定义的Annotation mda = toM.getAnnotation(MyDefaultAnnotationReflect.class); String key = mda.key(); // 得到Annotation中指定变量的内容 String value = mda.value();// 得到Annotation中指定变量的内容 System.out.println("key = " + key);// 输出Annotation中的key System.out.println("value = " + value);// 输出Annotation中的value } } /* 结果: * key = baidu * value = www.baidu.cn * */ }
相关推荐
反射、Annotation与aop技术文档 反射、Annotation与aop技术文档,
利用java反射和annotation 实现数据库的连接
Core.Java基础教程 13.高级编程-反射、动态代理与Annotation
Java annotation 什么是java annotation?annotation 的7种标注类型。nnotation提供了一条与程序元素关联任何信息或者任何元数据(metadata...annotation类型是一种接口,能够通过java反射API的方式提供对其信息的访问。
031603_【第16章:Annotation】_反射与Annotation笔记.pdf 031604_【第16章:Annotation】_深入Annotation笔记.pdf 031701_【第17章:Java数据库编程】_JDBC概述笔记.pdf 031702_【第17章:Java数据库编程】_MySQL...
使用Annotation和反射实现Bean转SQL语句Demo
NULL 博文链接:https://dolphin-ygj.iteye.com/blog/548314
主要介绍了java 注解annotation的使用以及反射如何获取注解的相关资料,需要的朋友可以参考下
Annotation提供了一条与程序元素关联任何信息或者任何元数据(metadata)的途径。从某些方面看,annotation就像修饰符一样被使用,并应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声明中。这些信息被...
NULL 博文链接:https://mypyg.iteye.com/blog/849176
注解和反射学习,对应文章中annon1,2
《利用反射技术处理自定义注解》的设计与实现 AnnotationPrj,具体分annotation、deal、domain、test、util四个层来实现
noear::微型ORM框架(支持:java sql,xml sql,annotation sql;事务;缓存;监控;等...)可以嵌入到JVM脚本引擎(js, groovy, lua, python, ruby)及GraalVM支持的部分语言。0.2Mb(且是功能完整,方案丰富;可极...
java-reflection-annotation-test 探索java反射和注解之美
文章目录Java ReflectionJava反射机制提供的功能Java反射相关的主要API...反射调用类的完整结构获取实现的全部接口获取所继承的父类获取全部的构造器获取全部的方法获取全部的属性获取Annotation相关获取泛型相关获取...
General JDBC operation based on reflection and annotation./reflection_db_converstion_annotation/src/com/ubuntuvim/core/CoreDao.java 核心类 封装了 JDBC 的增删改查操作/reflection_db_converstion_...
注解(Annotation)JDK5.0引入 内置注解: @Override:重写方法 @Deprecated:废弃 @SuppressWarnings:镇压警告 元注解(meta-annotation): 可自定义注解 @Target:描述注解的使用范围,传入value...反射(框架设计的