美文网首页
EnableAsync原理(原创)

EnableAsync原理(原创)

作者: xuyouxin1 | 来源:发表于2018-12-06 16:27 被阅读0次

    1、EnableMyAsync里面有@Import(MyAsyncConfigurationSelector.class)
    2、MyAsyncConfigurationSelector根据条件选择代理配置,ProxyAsyncConfiguration为其中一种

    生成AsyncAnnotationBeanPostProcessor 对象,并放入容器
    3-1、ProxyAsyncConfiguration有@Bean注解的方法- AsyncAnnotationBeanPostProcessor asyncAdvisor(),生成AsyncAnnotationBeanPostProcessor 对象
    3-2、ProxyAsyncConfiguration的父类AbstractAsyncConfiguration,方法setConfigurers中注入configurers对象,从中获取executor对象
    3-3、AsyncDefaultAutoConfiguration对象是一个条件配置类,@ConditionalOnProperty(value = "spring.sleuth.async.enabled", matchIfMissing = true)说明默认是生效的,会提供一个实现了AsyncConfigurer接口的
    DefaultAsyncConfigurerSupport对象,接口方法getAsyncExecutor返回的是new SimpleAsyncTaskExecutor()的代理类LazyTraceExecutor

    接3-1
    把Async注解与异步执行串起来:
    4-1、AsyncAnnotationBeanPostProcessor里有setBeanFactory方法,里面指定了AsyncAnnotationAdvisor对象为注解增强器对象
    4-2、AsyncAnnotationAdvisor的构造方法中,指定了Async注解为想要增强的注解,并调用buildPointcut方法生成与注解匹配的Pointcut对象;同时会调用buildAdvice生成Advice对象
    4-3、buildAdvice生成的Advice对象是AnnotationAsyncExecutionInterceptor实例,其父类为AsyncExecutionInterceptor,实现了接口MethodInterceptor的invoke方法,会把原来的代码封装成一个任务交给executor对象来异步执行

    把程序启动与bean生成代理类对象串起来:
    5-1、AsyncAnnotationBeanPostProcessor父类的父类- AbstractAdvisingBeanPostProcessor,实现了BeanPostProcessor接口的postProcessAfterInitialization,在对象实例化之后的处理,如果对象的类实现了Advised接口或者对象的方法有需要增强,则会生成一个代理类对象返回,否则返回原对象

    相关文章

      网友评论

          本文标题:EnableAsync原理(原创)

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