Java注解(
Annotation
)又称为Java标注,是JDK5.0引入的一种注释机制.注解是原数据的一种形式,提供有关于程序但不属于程序本身的数据.注解对他们注解的代码的操作没有直接的影响.
声明方式
注解的声明方式使用@interface
关键字,举例说明:
public @interface MyInject{
}
元注解
@Target
用来限制可以使用注解的Java元素类型ElementType.ANNOTATION_TYPE
注解类型ElementType.CONSTRUCOR
注解构造函数ElementType.FIELD
注解字段或属性ElementType.LOCAL_VARIABLE
注解局部变量ElementType.METHOD
注解方法ElementType.PACKAGE
注解包ElementType.PARAMETER
注解方法的参数ElementType.TYPE
注解类的任何元素
@Retention
指定标记注解的存储方式RetentionPolicy.SOURCE
标记的注解仅保留在源码级别中,但会被编译器忽略Retention.CLASS
标记的注解在编译时由编译器保留,但会被虚拟机(JVM)忽略Retention.RUNTIME
标记的注解由JVM保留,因此运行时环境可以实用它.
APT
注解处理器(Annotation Processor Tools
)
用于处理注解.注解处理器是javac自带的一个工具,用来在编译时期扫描处理注解信息,你可以为某些注解注册自己的注解处理器.
注册的注解处理器由javac调起,并将注解的信息传递给注解处理器进行处理.
注解处理器是对注解应用最为广泛的场景.在Glide、EventBus、ButterKnife、Tinker、ARouter等常用框架中都有使用.
CLASS
定义为class级别的注解,会被保留在class文件中,但是会被虚拟机忽略(即无法在运行期间反射获取注解).此时完全符合这种注解的应用场景为字节码操作,如:ASpect、热修复Robust
RUNTILE
注解保留到运行期间,意味着我们可以在运行期间结合反射技术获取注解中的所有信息.