使用 Spring 构建应用程序时,通常使用 @EnableAsync 注解来启用异步执行,并在 @Async 的帮助下over 方法很容易使它们异步。
@Async 基本上有两个使用规则:
在下面的示例中,不会出现编译问题,但方法(尽管使用 @Async 注解)不会按预期执行。
@Slf4j @Service @RequiredArgsConstructor public class HelloService { public String get() { log.info("Chegou!"); print(); return "Ola!"; } @Async @SneakyThrows public void print() { Thread.sleep(Duration.ofSeconds(5)); log.info("Burlado!"); } }
我们通常希望,因为这是类的责任,所以必须异步执行的代码块保留在其中。怎么解决?
简单!
我们只需要创建另一个有帮助的类,例如:
@Service public class AsyncService { @Async public void run(final Runnable runnable) { runnable.run(); } @Async public <O> O run(final Supplier<O> supplier) { return supplier.get(); } }
我们对该 bean 进行依赖注入,其中需要异步执行,最重要的是,我们可以将方法设为私有。
@Slf4j @Service @RequiredArgsConstructor public class HelloService { private final AsyncService asyncService; public String get() { log.info("Chegou!"); asyncService.run(this::print); return "Ola!"; } @SneakyThrows private void print() { Thread.sleep(Duration.ofSeconds(5)); log.info("Burlado!"); } }
这个小例子演示了几个概念和资源的应用:控制反转、依赖注入、SOLID、设计模式、功能接口。
以上是Burlando o @Async do Spring的详细内容。更多信息请关注PHP中文网其他相关文章!