java注解源码阅读

介绍

最近想深入了解一下java,就想到了来读一读java源码。下面是我们的jdk版本,以及java注解所在的包。注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。通过代理对象调用自定义注解(接口)的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池。

jdk版本1.8
package java.lang.annotation;

java注解源码阅读_第1张图片
image.png

可以看的java注解在 rt.jar 下面的java.lang.annotation包中。

注解的分类

Java 1.5中开始引入的Annotation,类似于注释解释的一种技术,我们常常使用它在代码中来做一些注释,并且在适当(编译代码或运行代码等时机)的时候,对其进行解释,并且做一些额外的操作

下面我用idea自带的diagram工具打开它们之间的联系。

java注解源码阅读_第2张图片
image.png

我们先来看看这两个枚举类:

  • ElementType: 这个枚举类型的常量定义了注解适用的目标,结合Target注解使用

1.TYPE Class类,接口(包括注解类型或者enum类型)
2.FIELD 属性(包括enum实例)
3.METHOD 方法
4.PARAMETER 方法参数
5.CONSTRUCTOR 类构造器
6.LOCAL_VARIABLE 本地变量
7.ANNOTATION_TYPE 注解类型
8.PACKAGE 包

  • RetentionPolicy: 定义注解保存级别。 这个枚举类型的常量描述保留注释的各种政策。 他们结合使用 Retention元注解类型进行指定注解要保留多长时间。

1.SOURCE 源代码注解,被编译器丢弃
2.CLASS 类注解,被编译器记录在class文件中,运行时被VM丢弃,在编译时使用,属于默认配置
3.RUNTIME 被编译器记录在class文件中,运行时可用,被VM保留,所以可以在运行时搭配反射使用

注解异常处理

下面三个类是注解的异常处理类,注解类型不匹配异常,格式化异常

java注解源码阅读_第3张图片
image.png

元注解

java注解源码阅读_第4张图片
image.png
  • Annotation:定义了注解的常用方法
  • Documented:标志将此注解包含至javadoc中
  • Inherited: 注解允许继承
  • Repeatable: 可以重复的注解 jdk 1.8新增
  • Retention: 定义注解保存级别
  • Target: 定义注解适用的目标
  • Native:表示一个定义常量值的字段可以从本机代码被引用。

你可能感兴趣的:(java注解源码阅读)