美文网首页
java注解源码阅读

java注解源码阅读

作者: 一颗懒能 | 来源:发表于2017-10-22 11:15 被阅读0次

    介绍

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

    jdk版本1.8
    package java.lang.annotation;

    image.png

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

    注解的分类

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

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

    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保留,所以可以在运行时搭配反射使用

    注解异常处理

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

    image.png

    元注解

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

    相关文章

      网友评论

          本文标题:java注解源码阅读

          本文链接:https://www.haomeiwen.com/subject/frrguxtx.html