一、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)的基本概念详解
介绍了TestNG,说明了它的目标和功能,并展示了如何在真实的环境中应用这些功能。 展示了如何集成TestNG和已有的代码、开发框架以及软件库。 展示了如何测试关键代码的特征,如封装、共享状态、范围和线程安全。 ...
介绍了TestNG,说明了它的目标和功能,并展示了如何在真实的环境中应用这些功能。 展示了如何集成TestNG和已有的代码、开发框架以及软件库。 展示了如何测试关键代码的特征,如封装、共享状态、范围和线程安全。 ...
000000_【课程介绍 —— 写在前面的话】_Java学习概述笔记.pdf 010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述笔记.pdf 010102_【第1章:JAVA概述及开发环境搭建】_Java开发环境搭建笔记.pdf 010201_【第2...
6.6.1 接口的概念 192 6.6.2 接口的定义 193 6.6.3 接口的继承 195 6.6.4 使用接口 195 6.6.5 接口和抽象类 197 6.6.6 面向接口编程 198 6.7 内部类 202 6.7.1 非静态内部类 202 学生提问:非静态内部类对象...
2.2. Java中基本概念 2-5 3. 二•定义,关键字和类型 3-5 3.1. 注释的三种形式 3-5 3.2. Java代码中的“;”、“{}”、“ ” 3-5 3.3. 标识符 3-5 3.4. 数据类型 3-6 3.5. 命名规则 3-6 4. 三•表达式和控制流 4-6 ...
2.2. Java中基本概念 3. 二 定义,关键字和类型 3.1. 注释的三种形式 3.2. Java代码中的“;”、“{}”、“ ” 3.3. 标识符 3.4. 数据类型 3.5. 命名规则 4. 三 表达式和控制流 4.1. 变量和作用域 4.2. 操作...
8.4.2 Annotation与部署描述文件 315 8.5 开发有状态的Session Bean 318 8.6 Session Bean的生命周期 321 8.6.1 无状态Session Bean的生命周期 321 8.6.2 有状态Session Bean的生命周期 322 8.6.3 定制Session Bean...
这里Around的value参数应该写的是上面的签名,而不是runTime,如果@Around 参数值里 “@annotation (timeCost)" 是为了匹配 costTimeAround 方法的入参 timeCost,名称要相同。 @Around("costTime()") public ...
Java 的 Web框架虽然各不相同,但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向抽象实现请求和响应的...
2.2. Java中基本概念 2-5 3. 二•定义,关键字和类型 3-5 3.1. 注释的三种形式 3-5 3.2. Java代码中的“;”、“{}”、“ ” 3-5 3.3. 标识符 3-5 3.4. 数据类型 3-6 3.5. 命名规则 3-6 4. 三•表达式和控制流 4-6 ...
其他的 Java 平台规范 .......................................................................................................................................3 其他重要参考资料 ............................
一组库,可帮助开发人员使用Java中的体系结构概念。 目标: 表示一段代码(包,类,方法...)实现了体系结构的概念。 使人类读者可以轻松确定给定代码是哪种架构概念。 允许工具集成(做一些有趣的事情,例如生成...
..........Java中的IO .....I/O_BIO ..........I/O流对象与使用 ..........文件相关类的使用 .....集合 ..........概述 ..........集合API .....线程 ..........概念 ..........操作线程 ..........线程安全-使用...
此外,该框架支持与Spring集成,提供使用annotation的方式让开发人员方便地注册事件及定义事件处理,使用Spring事务管理器管理事务时,支持Unit Of Work模式存储数据。 2 核心概念 2.1 Aggregate Aggregate(聚合)...
微信消息注解:jwx定义了14个消息或事件注解,涵盖了目前所有的微信消息和事件类型,这些注解定义在包com.github.jweixin.jwx.message.annotation中,微信注解代表了消息或事件类型,可以通过微信注解配置识别请求...
AspectJ:讲解在Eclipse下开发AspectJ的3种方式(命令行、Ant、AJDT),两种核心技术(Aspect类与Annotation开发),并讲解AspectJ计Java5新特性的支持,最后在实际的Java EE项目中实 现5种AspectJ 功能(日志记录器、...
Java的W eb框架虽然各不相同,但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请 求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向抽象实现请求和响应的...
不过确定的是,在正常 JAVA 开发中,自己写注解是比较少的,更多的情况是使用第三方库的注解,正因为如此,大多数开发者对于注解仅仅停留在会用的地步。试想一下,当大多数人都不会的时候你会,那么你是不是超越的大...