在同一个类中,一个方法调用另外一个有注解(比如@Async)的方法,注解是不会生效的。
原因是:spring在扫描bean的时候会扫描方法上是否包含@Async注解,如果有,会为这个bean动态地生成一个子类代理类,代理类是继承原来的那个bean。此时,当这个有注解的方法被调用的时候,实际上是由代理类来调用的,代理类在调用是会增加异步作用。然而,如果这个注解的方法是被同一个类的其他方法调用,该方法并没有通过代理类,而是直接通过原来的那个bean。所以就没有增加异步作用,产生的现象就是@Async注解无效。
处理方法,把@Async方法提取到其他类中