首页  >  文章  >  Java  >  Burlando o @Async do Spring

Burlando o @Async do Spring

王林
王林原创
2024-09-12 10:21:001220浏览

Burlando o @Async do Spring

使用 Spring 构建应用程序时,通常使用 @EnableAsync 注解来启用异步执行,并在 @Async 的帮助下over 方法很容易使它们异步。

@Async 基本上有两个使用规则:

  • 带注释的方法必须是public
  • 方法调用者不能来自同一个类

在下面的示例中,不会出现编译问题,但方法(尽管使用 @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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn