使用Spring 建立應用程式時,通常使用@EnableAsync 註解來啟用非同步執行,並在@Async 的幫助下很容易使它們異步。
@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中文網其他相關文章!