Spring を使用してアプリケーションを構築する場合、@EnableAsync アノテーションを使用して非同期実行を有効にし、@Async を利用するのが一般的です。 over メソッドを使用すると、メソッドを簡単に非同期にできます。
@Async には基本的に 2 つの使用ルールがあります:
以下の例では、コンパイルの問題は発生しませんが、メソッド (@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 @Async do Springの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。