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

Burlando o @Async do Spring

王林
王林原創
2024-09-12 10:21:001049瀏覽

Burlando o @Async do Spring

使用Spring 建立應用程式時,通常使用@EnableAsync 註解來啟用非同步執行,並在@Async 的幫助下很容易使它們異步。

@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