springboot @Async 源码
2022-07-29 11:14:35 7 举报
springboot @Async 异步任务源码分析
作者其他创作
大纲/内容
setBeanFactory方法中将ProxyAsyncConfiguration的异步注解传递给了AsyncAnnotationAdvisor通知类
通过setConfigurers方法可以看出如果需要自定义线程池处理只需要实现AsyncConfigurer类重写其中的方法即可
AsyncAnnotationAdvisor构造器中对切面和通知进行了初始化并通过父类获得切面和通知
AsyncAnnotationAdvisor.buildPointcut方法实现了自定义异步注解-----------------------------在ProxyAsyncConfiguration创建AsyncAnnotationBeanPostProcessor对象时读取了@EableAsync注解的自定义异步注解,并设置给了beanPostProcessor
determineAsyncExecutor方法根据注解获取线程池
EnableAsync导入了AsyncConfigurationSelector配置类
buildAdvice创建了AnnotationAsyncExecutionInterceptor是真正对bean增强的拦截器对父类getExecutorQualifier的重写实现了@Async注解自定义使用不同的线程池的功能
@EnableAsync
postProcessAfterInitialization方法会调用advisor的方法对bean进行增强
AsyncAnnotationBeanPostProcessor在setBeanFactory方法中将advisor设置为AsyncAnnotationAdvisor
在AsyncAnnotationAdvisor的buildPointcut中定义了注解的切入点,
AsyncExecutionAspectSupport#doSubmit最终交由线程池执行的方法
AsyncConfigurationSelector中根据代理模式返回了ProxyAsyncConfiguration类
AsyncExecutionInterceptor.invoke
AbstractAsyncConfiguration此类为AsyncConfigurationSelector的父类类中的setConfigurers方法标有@Autowired是典型的setter方法注入
AbstractAdvisingBeanPostProcessor基于通知的beanPostProcessor
AsyncConfigurationSelector继承自AbstractAsyncConfigurationasyncAdvisor方法中创建了一个beanPostProcessor
0 条评论
回复 删除
下一页