Spring @Async 注解

﹥>﹥吖頭↗ 提交于 2019-12-30 17:44:08

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

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

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

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

  • 他的原理和异步注解的原理是类似的,spring在启动容器的时候,会扫描切面所定义的类。
  • 在这些类被注入的时候,所注入的也是代理类,当你调用这些方法的时候,本质上是调用的代理类。
  • 通过代理类再去执行父类相对应的方法,那spring只需要在调用之前和之后执行某段代码就完成了AOP的实现了
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!