您好,欢迎访问三七文档
Java的注解与反射最近在学jdk1.5的新特性,看到注解部分难以理解,不明白到底有什么用处,但与反射接合起来看,就不难看出它的作用之一:代码分析,即使用反射提取java成分的注解,生成日志,便于查看以分析自己编写的代码。我们先来看看注解的分类:元注解、自定义注解。其中,元注解就是“用于注解的注解”,@Target、@Retention、@Documented、@Inherited,这些注解被包含在java.lang.annotation包中,下面我们简要说明这四种注解的作用,其中的具体参数就靠各位自己去百度了。@Target用于说明注解所修饰的对象范围,注解可以被用来修饰包、类、接口、成员方法、构造器、成员字段、方法参数、枚举值、Annotation类型;@Retention用于定义该自定义注解被保留的时间长短;@Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员;@Inherited元注解是一个标记注解,如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类(注意:@Inheritedannotation类型是被标注过的class的子类所继承。类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation。当@Inheritedannotation类型标注的annotation的Retention是RetentionPolicy.RUNTIME,则反射API增强了这种继承性。如果我们使用java.lang.reflect去查询一个@Inheritedannotation类型的annotation时,反射代码检查将展开工作:检查class和其父类,直到发现指定的annotation类型被发现,或者到达类继承结构的顶层);@Override用于标明方法是被重载的,若所标注的方法没有被重载则编译器报错;@SuppressWarnings用于消除编译器的警告;@Deprecated用于已经过期不用的类。那么什么是“自定义注解”?先举个例子,看下面代码:当然,这段代码没有任何实际作用,内部没有变量,那么我需要先向其中添加变量,如下所示:定义了注解,我们就需要在自己定义的java成分中使用这些注解。例如我将这个注解用在如下类中:这样就完了?不!还有一步,如果没有注解处理器,那么这些自定义注解可以说是没有任何用处的。注解处理器实际上就是利用了反射机制,获取java成分中的注解信息,由此我们可以分析代码的运行过程。以上是注解处理器的简单实例,在实际工作中可以使用I/O流将项目的执行过程输出到日志文件中保存,然后可以查看自己的日志,了解程序的运行,便于调试、分析代码。
本文标题:java注解与反射
链接地址:https://www.777doc.com/doc-2881148 .html