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源码如下
进一步追踪ElementType源码如下
可以看出ElementType是枚举类型,它只是定义一些类型而已。
下面模仿jdk中注解,实现自定义注解。自定义注解名称为AuthorityAnnotation
下面开始测试自定义注解。类名为AnnotationTest
由此,自定义注解已经完成
本文深入解析Java自定义注解的原理,从元注解开始,包括@Retention、@Target、@Documented和@Inherited的用法。通过示例介绍了如何创建并测试自定义注解AuthorityAnnotation,帮助理解注解在Java中的应用。
1295





