Annotation注解介绍

元注解

@Target

说明了Annotation修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。

说明
ElementType.ANNOTATION_TYPE 注释类型声明
ElementType.CONSTRUCTOR 构造方法申明
ElementType.FIELD 字段声明(包括枚举常量)
ElementType.LOCAL_VARIABLE 局部变量声明
ElementType.METHOD 方法声明
ElementType.PACKAGE 包声明
ElementType.PARAMETER 方法的参数声明
ElementType.TYPE 类、接口(包括注解类型)或枚举声明

@Retention

用于表明注解保留时长,即作用范围。如果注解的定义没有设置Retation,那默认会将其设置为RetentionPolicy.CLASS。 |值 |说明 | |:—|:—| |RetentionPolicy.SOURCE|源文件中有效,仅在源文件中保留,编译器会忽略注解| |RetentionPolicy.CLASS|class文件中有效,编译器会保留注解,但jvm会忽略注解| |RetentionPolicy.RUNTIME|运行时有效,在运行时jvm会保留注释,因此可以通过反射获取到注解的值|

@Documented

用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。

@Inherited

@Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。

自定义注解

参考资料

https://docs.oracle.com/javase/tutorial/java/annotations/index.html
http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html
http://www.cnblogs.com/mandroid/archive/2011/07/18/2109829.html

Table of Contents