Spring : @EnableAsync 的工作原理

博客介绍了开发人员使用注解的情况,包括注解导入,根据注解属性决定引入。定义基础设施及实现类,在容器启动时对初始化进行后置处理,若方法或级别使用特定注解,会将对象包裹到目标外。还提及为目标创建代理及异步调用机制。
  1. 开发人员使用注解@EnableAsync
  2. 注解@EnableAsync导入AsyncConfigurationSelector
  3. AsyncConfigurationSelector根据注解@EnableAsync 属性AdviceMode mode决定引入ProxyAsyncConfiguration/AspectJAsyncConfiguration

    这里以 ProxyAsyncConfiguration 为例

  4. ProxyAsyncConfiguration 定义基础设施bean,实现类为AsyncAnnotationBeanPostProcessor,名称为org.springframework.context.annotation.internalAsyncAnnotationProcessor

    bean名称定义为TaskManagementConfigUtils.ASYNC_ANNOTATION_PROCESSOR_BEAN_NAME

  5. bean AsyncAnnotationBeanPostProcessor 拥有一个AsyncAnnotationAdvisor,这是一个Spring Advisor,会被包裹到方法或者bean级别使用了注解@AsyncEJB 3.1 javax.ejb.Asynchronous注解的bean上;
  6. bean AsyncAnnotationBeanPostProcessor 在容器启动时对每个bean 的初始化进行后置处理,如果该bean的某个方法或者bean级别使用了注解@AsyncEJB 3.1 javax.ejb.Asynchronous注解,则将自己所拥有的AsyncAnnotationAdvisor包裹到目标bean的最外面;

    如果需要为目标bean创建代理,则创建相应的代理对象。

  7. bean AsyncAnnotationBeanPostProcessor 所持AsyncAnnotationAdvisor对象最重要的是其包装在目标bean 外面的Advice AnnotationAsyncExecutionInterceptor。当使用者调用相应bean上的异步方法时,其实调用先到达代理对象,然后经过该AnnotationAsyncExecutionInterceptor,而该AnnotationAsyncExecutionInterceptor会使用异步机制调用目标bean对象上使用者指定要调用的方法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值