@Import在Spring中的应用之@EnableAsync

前言

在上一篇博文Spring之ConfigurationClassPostProcessor解析流程中,我们重点介绍了@Import注解 。在这篇文章中,我们以@EnableAsync举例说明@Import在Spring中的应用

1.点击@EnableAsync注解 查看@Import注入的类

2.点进去这个类,发现一个很相似的方法selectImports(AdviceMode adviceMode),但是注意这个参数不是AnnotationMetadata,不是ImportSelector的实现方法,是当前类AdviceModeImportSelector的实现方法

3.我们查看其父类,发现了ImportSelector的实现方法最终会调用步骤2的方法,这个方法主要是根据注解上设置的值,来判断是用代理还是用aspectj进行增强,一般会是第一种

4.我们点击查看ProxyAsyncConfiguration这个类,发现有一个enableAsync属性,这个是父类的一个属性。这个属性是怎么赋值的 让我们一探究竟

5.这个配置类实现了ImportAware接口,有一个回调方法,在ConfigurationClassPostProcessor解析流程结束后,会注册一个bean到Spring中。

这个源码在ConfigurationClassPostProcessor#processConfigBeanDefinitions倒数第二个if判断

这个bean是一个bpp,会在AbstractAsyncConfiguration这个对象所属的bd解析成bean的时候调用这个bpp的postProcessBeforeInitialization方法,完成方法回调

源码在ImportAwareBeanPostProcessor#postProcessBeforeInitialization

通过这个回调函数,spring就能获取到用户设置的@EnableAsync属性

6.我们回头再查看ProxyAsyncConfiguration这个类,它有一个@Bean标记的方法,通过步骤5,可以获取@EnableAsync的属性,@Bean标记的方法会实例化一个AsyncAnnotationBeanPostProcessor对象,将@EnableAsync的属性设置进去,然后返回这个对象

总结

@EnableAsync注解最终注入一个类型为AsyncAnnotationBeanPostProcessor的bpp,这个bpp的源码等我完全理解再补上。这里主要以@EnableAsync注解为例子来帮助大家快速理解流程,流程很多都差不多,但是细节需要大家自行去翻阅源码

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值