Spring @Async 注解

本文详细介绍了Spring框架中@Async异步方法的实现原理,包括如何通过代理类完成异步执行,以及为何在同一类中调用@Async注解的方法会失效。此外,还深入探讨了Spring AOP的实现方式,解释了切面类如何被代理以实现特定的前置和后置操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 spring 在扫描bean的时候会扫描方法上是否包含@async的注解

  • 如果包含的,spring会为这个bean动态的生成一个子类,我们称之为代理类(?),代理类是继承我们所写的bean的,然后把代理类注入进来,那此时,在执行此方法的时候,会到代理类中,代理类判断了此方法需要异步执行,就不会调用父类(我们原本写的bean)的对应方法。
  • spring自己维护了一个队列,他会把需要执行的方法,放入队列中,等待线程池去读取这个队列,完成方法的执行,从而完成了异步的功能。
  • 我们可以关注到再配置task的时候,是有参数让我们配置线程池的数量的。
  • 因为这种实现方法,所以在同一个类中的方法调用,添加@Async注解是失效的!原因是当你在同一个类中的时候,方法调用是在类体内执行的,spring无法截获这个方法调用

2、spring为我们提供了AOP,面向切面的功能(和smartFrame  AOP实现原理差不多)

  • 他的原理和异步注解的原理是类似的,spring在启动容器的时候,会扫描切面所定义的类。
  • 在这些类被注入的时候,所注入的也是代理类,当你调用这些方法的时候,本质上是调用的代理类。
  • 通过代理类再去执行父类相对应的方法,那spring只需要在调用之前和之后执行某段代码就完成了AOP的实现了

转载于:https://my.oschina.net/u/3847203/blog/1844219

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值