回答
在 Spring 中@Async
表示执行异步操作,但是使用了它并不一定会让方法异步执行,因为它依赖于 Spring AOP 代理机制,所以它需要满足几个条件:
- 启用异步支持。我们需要在配置类上面标注
@EnableAsync
,告诉 Spring 容器启用异步功能。 - 方法必须为
public
,且不能被同一个类内部直接调用。因为@Async
依赖 Spring AOP 代理机制。 @Async
的方法必须为 void 或者 Future
详解
Spring 中 @Async
注解基于 Spring AOP 实现异步调用,运行时会创建一个代理对象,当方法被调用时,代理会将方法交给线程池执行,而不是在主线程中执行。
一、启用异步支持
异步执行在 Spring 中并不是默认开启的,所以要启用它就必须在配置类或者主启动类上添加 @EnableAsync
注解,显式启用异步支持。@EnableAsync
就是告诉 Spring 容器,要它去扫描和识别 @Async
注解的方法。
@Configuration
@EnableAsync
public class AppConfig {
// 启用异步支持
}
二、代理机制要求