当前位置 博文首页 > L-Java:Spring @Async异步任务源码(2)—AsyncAnnotationBeanPos

    L-Java:Spring @Async异步任务源码(2)—AsyncAnnotationBeanPos

    作者:[db:作者] 时间:2021-07-25 15:57

    ??基于最新Spring 5.x,详细介绍了Spring @Async异步任务机制的实现原理!主要是AsyncAnnotationBeanPostProcessor创建异步任务代理以及AnnotationAsyncExecutionInterceptor执行异步任务增强的逻辑。

    ??此前我们讲解了Spring @Async异步任务的入口源码,主要是<task:annotation-driven/>标签、<task:executor/>标签以及@EnableAsync注解的源码解析,无论是<task:annotation-driven/>标签还是@EnableAsync注解,最终的目的就是向容器注入AsyncAnnotationBeanPostProcessor后处理器
    ??现在,我们从AsyncAnnotationBeanPostProcessor入手,进一步讲解Spring异步任务的具体处理流程!

    文章目录

    • 1 AsyncAnnotationBeanPostProcessor异步任务后处理器
      • 1.1 setBeanFactory回调
        • 1.1.1 AsyncAnnotationAdvisor
          • 1.1.1.1 buildAdvice构建通知
            • 1.1.1.1.1 configure配置拦截器
              • 1.1.1.1.1.1 getDefaultExecutor获取默认执行器
          • 1.1.1.2 buildPointcut构建切入点
        • 1.1.2 setAsyncAnnotationType设置异步任务注解
      • 1.2 postProcessAfterInitialization执行代理
        • 1.2.1 isEligible是否合格
        • 1.2.2 prepareProxyFactory准备代理工厂
    • 2 AnnotationAsyncExecutionInterceptor异步任务拦截器
      • 2.1 invoke执行异步增强
        • 2.1.1 determineAsyncExecutor确定执行器
          • 2.1.1.1 getExecutorQualifier获取执行器限定符
          • 2.1.1.2 findQualifiedExecutor查找执行器
          • 2.1.1.3 get获取默认执行器/异常处理器
        • 2.1.2 doSubmit异步执行
        • 2.1.3 handleError异常处理
    • 3 总结
    cs