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

本文深入解析Java自定义注解的原理,从元注解开始,包括@Retention、@Target、@Documented和@Inherited的用法。通过示例介绍了如何创建并测试自定义注解AuthorityAnnotation,帮助理解注解在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源码如下


进一步追踪ElementType源码如下

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

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


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


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

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值