java自定义注解原理深度解析

jdk 5.0开始引入了枚举、注解等,注解离不开反射,下面就先解释jdk中注解的使用原理,然后再实现自定义注解。

注解的功能主要分为两部分:

一、作为特定的标记

二、作为额外信息的载体

它是附加在代码中的一些元信息,可以在工具编译、运行时进行解析和使用,注解不会影响代码的逻辑,仅仅起到辅助作用。注解的定义使用的是@interface 关键字。首先需要理解一个 概念——元注解。

元注解:指的是 对注解的元素进行描述,此时需注意,注解可以自己描述自己。jdk 5.0中有四种元注解:

@Retention:用于定义注解的保留策略,也就是注解的有效范围,有三种:

@Retention(RetentionPolicy.SOURCE

注解在源码中存在,在class中不存在

@Retention(RetentionPolicy.CLASS) 

默认的保留策略,注解在class中存在,在运行期无法获取

@Retention(RetentionPolicy.RUNTIME) 注解在class中存在,在运行期可通过反射获取

@Target:用于描述注解的使用范围,有以下几种:

@Target(ElementType.TYPE)  
用于接口、类、枚举、注解
@Target(ElementType.FIELD) 
用于字段、枚举的常量
@Target(ElementType.METHOD) 用于方法
@Target(ElementType.PARAMETER) 
用于方法参数
@Target(ElementType.CONSTRUCTOR) 
用于构造函数
@Target(ElementType.LOCAL_VARIABLE) 
用于局部变量
@Target(ElementType.ANNOTATION_TYPE) 用于注解
@Target(ElementType.PACKAGE) 用于

@Document:表示该注解将被包含在javadoc中

@Inherited:表示子类可以继承父类中的该注解

查看jdk5.0 @Target源码如下

java自定义注解原理深度解析_第1张图片

进一步追踪ElementType源码如下

java自定义注解原理深度解析_第2张图片

可以看出ElementType是枚举类型,它只是定义一些类型而已。

下面模仿jdk中注解,实现自定义注解。自定义注解名称为AuthorityAnnotation

java自定义注解原理深度解析_第3张图片

下面开始测试自定义注解。类名为AnnotationTest

java自定义注解原理深度解析_第4张图片

由此,自定义注解已经完成

你可能感兴趣的:(java自定义注解的实现,自定义注解原理,java,annotation实现实例,自定义注解,原创)