java中的Annotation概念
来源:互联网 发布:linux svn 版本号 编辑:程序博客网 时间:2024/05/17 03:56
一、Annotation究竟是什么?
Annotation 提供了一条与程序元素关联任何信息或者任何元数据(metadata)的途径。从某些方面看,annotation就像修饰符一样被使用,并应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声明中。这些信息被存储在annotation的“name=value”结构对中。annotation类型是一种接口,能够通过java反射API的方式提供对其信息的访问。
annotation能被用来为某个程序元素(类、方法、成员变量等)关联任何的信息。需要注意的是,这里存在着一个基本的潜规则:annotaion不能影响程序代码的执行,无论增加、删除annotation,代码都始终如一的执行。另外,尽管一些annotation通过java的反射api方法在运行时被访问,而java语言解释器在工作时忽略了这些annotation。正是由于java虚拟机忽略了annotation,导致了annotation类型在代码中是“不起作用”的;只有通过某种配套的工具才会对annotation类型中的信息进行访问和处理。本文中将涵盖标准的annotation和meta- annotation类型,陪伴这些annotation类型的工具是java编译器(当然要以某种特殊的方式处理它们)。
由于上述原因,annotation在使用时十分简便。一个本地变量可以被一个以NonNull命名的annotation类型所标注,来作为对这个本地变量不能被赋予null值的断言。而我们可以编写与之配套的一个annotation代码分析工具,使用它来对具有前面变量的代码进行解析,并且尝试验证这个断言。当然这些代码并不必自己编写。在JDK安装后,在JDK/bin目录中可以找到名为“apt”的工具,它提供了处理annotation的框架:它启动后扫描源代码中的annotation,并调用我们定义好的annotation处理器完成我们所要完成的工作(比如验证前面例子中的断言)。说到这里,annotation的强大功能似乎可以替代XDoclet这类的工具了,随着我们的深入,大家会更加坚信这一点。
二、Annotation的定义:
这段文字开始介绍annotation相关技术。在此大家将看到java5.0的标准annotation类型,这种标准类型就是前文中所说的“内建”类型,它们可以直接被javac支持。可喜的是,在java6.0beta版中的javac已经加入了对自定义annotation的支持。
三、Annotation工作原理:
在java5.0 中Java.lang.reflect提供的反射API被扩充了读取运行时annotation的能力。让我们回顾一下前面所讲的:一个annotation类型被定义为runtime retention后,它才是在运行时可见,当class文件被装载时被保存在class文件中的annotation才会被虚拟机读取。
其中java.lang.reflect.AnnotatedElement是重要的接口,它代表了提供查询annotation能力的程序成员。这个接口被java.lang.Package、java.lang.Class实现,并间接地被Method类、Constructor类、java.lang.reflect的Field类实现。而annotation中的方法参数可以通过Method类、Constructor类的getParameterAnnotations()方法获得
- java中的Annotation概念
- Java中的Annotation解析
- Java中的Annotation
- Java中的注解(@ Annotation)
- JAVA中的注解(Annotation)
- java中的注解(Annotation)
- java中的注解Annotation
- Java中的Annotation注解
- Java中的Annotation(1)----三个基本Annotation
- Java中的Annotation(2)----Annotation工作原理
- Java种的注解(Annotation)概念
- Java 中的Annotation全攻略
- Java中的Annotation解析(一)
- Java中的Annotation解析(二)
- Java 中的Annotation的定义
- java中的内置注解Annotation
- Java中的注释Annotation用法
- Java中的注解(annotation)
- java Date型时间比较大小
- cpu解读8:DMA控制器的引入
- Linux : SUID SGID
- pc解读9:中断机制的引入
- pc解读10: 中断控制器的引入
- java中的Annotation概念
- pc解读11: 指令译码与控制解读
- pc解读12:时序控制与晶振以及指令周期的关系
- qnx与windows共享文件
- pc解读13:定时器的使用与时间获取
- nginx lingering_close
- pc解读14: 系统总线的发展
- Tracking-Learning-Detection TLD解析四 - 扩展及局限
- jQuery Validation Plugin验证信息显示位置问题