注解
提供一种为数据元素设置元数据的方法
- 元数据是添加到程序元素如方法,字段,类和包上的额外信息
- 注解是一种分散式的元数据设置方式,XML是集中式的设置方式
- 注解不能直接干扰程序代码的运行
注解的功能
- 作为特定的标记,用于告诉编辑器一些信息
- 编译时动态处理,如动态生成代码
- 运行时动态处理,作为额外信息的载体,如获取注解信息
注解的分类
- 标准注解:Override,Deprecated,SuppressWarnings
- 元注解:@Retention,@Target,@Inherited,@Documented
- 自定义注解
元注解
用于修饰注解的注解,通常用在注解的定义上
- @Target:注解的作用目标
- @Retention:注解的生命周期
- @Documented:注解是否应当被包含在JavaDoc文档中
- @Inherited:是否允许子类继承该注解
@Target
描述所修饰的注解的使用范围
- packages,types(类,接口,枚举,Annotation类型)
- 类型成员(方法,构造方法,成员变量,枚举值)
- 方法参数和本地变量(如循环变量,catch参数)
public enum ElementType {
/** 允许作用在类,接口,枚举上*/
TYPE,
/** 允许作用在属性字段上 */
FIELD,
/** 允许作用在方法上 */
METHOD,
/** 允许作用在方法参数上 */
PARAMETER,
/** 允许作用在构造器上 */
CONSTRUCTOR,
/** 允许作用在本地局部变量上 */
LOCAL_VARIABLE,
/** 允许作用在注解上 */
ANNOTATION_TYPE,
/** 允许作用在包上 */
PACKAGE,
/**
* 允许作用在泛型类的实参上
*
* @since 1.8
*/
TYPE_PARAMETER,
/**
* 允许作用在任何类型上
*
* @since 1.8
*/
TYPE_USE
}
@Retention
用于定义注解的生命周期
public enum RetentionPolicy {
/**
* 在源文件中保留,编译过后去掉
*/
SOURCE,
/**
* 不仅出现在源文件,class文件中也会有
*/
CLASS,
/**
* 运行时获取注解信息,运行时有效
* @see java.lang.reflect.AnnotatedElement
*/
RUNTIME
}