• JAVA注解-Async原理解析


    @Async这个注解在异步操作时经常会用到,像在java中实现异步操作就是使用多线程,这个注解原理也同样的使用多线程
    
    • 1

    @Async源码

    想使用Async注解的话需要再启动类上增加注解@EnableAsync,实际作用
    
    • 1

    在这里插入图片描述
    Async的源码并没有很特殊,注解内容就一个value,默认为空字符串,元注解有三个但是它们并没有涉及到异步的逻辑,在大部分的注解类里都有这三个元注解的存在,他们的作用是标记这个注解的作用域和javadoc文档的注解标记,下面简单进行解释

    @Target注解

    Async的类使用的就是TYPE跟METHOD,代表Async的注解可以作用在类跟方法上
    
    • 1

    这个注解其实就是限制了注解的作用范围,内部定义是一个ElementType数组,数组表示这个作用范围可以多个作用域,ElementType也是个枚举类。

    在这里插入图片描述
    ElementType中每个属性的作用域

    public enum ElementType {
        /** Class, interface (including annotation type), or enum declaration */
        /** 若为type类型,可以修饰类、接口(包括注解类型)或者枚举 */
        TYPE,
     
        /** Field declaration (includes enum constants) */
        /** 可以修饰域(包括枚举常量) */
        FIELD,
     
        /** Method declaration */
        /** 修饰方法 */
        METHOD,
     
        /** Formal parameter declaration */
        /** 修饰参数 */
        PARAMETER,
     
        /** Constructor declaration */
        /** 修饰构造方法 */
        CONSTRUCTOR,
     
        /** Local variable declaration */
        /** 修饰局部变量 */
        LOCAL_VARIABLE,
     
        /** Annotation type declaration */
        /** 修饰注解类型,比如它自身就是使用此类型 */
        ANNOTATION_TYPE,
     
        /** Package declaration */
        /** 修饰包 */
        PACKAGE,
     
        /**
         * Type parameter declaration
         *
         * @since 1.8
         */
         /** 修饰类型参数 */
        TYPE_PARAMETER,
     
        /**
         * Use of a type
         *
         * @since 1.8
         */
         /** 修饰任何类型都可以 */
        TYPE_USE
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    @Retention注解

    Retention注解有一个属性value,是RetentionPolicy类型的
    在这里插入图片描述
    RetentionPolicy是一个枚举,里面有三个属性

    • SOURCE
    • CLASS
    • RUNTIME
      在这里插入图片描述
      这三个属性代表了注解存在的生命周期
    • 1、SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
    • 2、CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
    • 3、RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;

    这3个生命周期分别对应于:Java源文件(.java文件) —> .class文件 —> 内存中的字节码。

    @Documented注解

    默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了@Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中,是一个标记注解,没有成员。
    在这里插入图片描述
    这个注解的Target就是ANNOTATION_TYPE,这样的话表示这个注解只能作用到注解上,不能作用在方法跟类上等作用域

  • 相关阅读:
    使用JMeter创建FTP测试计划
    小巧时尚的机械键盘,通吃五台设备,雷柏MT510PRO键盘体验
    centOS7中启动MySQL数据库提示: Failed to start mysqld.service Unit not found
    基于SpringBoot的社区医院管理系统设计与实现(源码+lw+部署文档+讲解等)
    【java计算机毕设】博客管理系统 javaweb springboot vue mysql
    CMT2380F32模块开发4-UART例程
    CPU的运行与其对线程的影响
    2022 年跨境电商要尝试的 25 个黑五营销技巧
    Shiro自定义Token
    舆情公关:企业网上有负面怎么办?
  • 原文地址:https://blog.csdn.net/AnNanDu/article/details/125604879