Quarkusで学ぶCDIインタセプタ活用入門!初心者でもわかる@Interceptorの使い方
生徒
「QuarkusのDIやCDIは少しずつ分かってきたんですが、インタセプタって何をするものなんですか?」
先生
「インタセプタは、メソッドの前後に共通処理を差し込む仕組みです。ログ出力や処理時間の計測などをまとめて書けます。」
生徒
「メソッドの中に直接書かなくていいんですか?」
先生
「はい。QuarkusではCDIのインタセプタを使うことで、業務ロジックをきれいに保てます。順番に見ていきましょう。」
1. CDIインタセプタとは何か
CDIインタセプタは、QuarkusやJava EEで使われる仕組みで、特定の処理の前後に共通の動作を追加するための機能です。 例えば、メソッドが呼ばれた瞬間にログを出したり、処理が終わった後に時間を記録したりといった用途があります。 初心者のうちは、同じようなコードを何度も書いてしまいがちですが、インタセプタを使うと共通処理を一か所にまとめられます。 これにより、QuarkusのDIとCDIの考え方を自然に理解でき、保守しやすいコードになります。
2. Quarkusでインタセプタを使うメリット
QuarkusでCDIインタセプタを活用すると、アプリケーション全体の構造が分かりやすくなります。 業務ロジックと共通処理を分離できるため、コードの見通しが良くなり、初心者でも理解しやすくなります。 また、Quarkusは起動が高速で軽量なフレームワークなので、インタセプタを使ってもパフォーマンスへの影響が少ない点も特徴です。 ログ管理、トランザクション制御、簡易的なセキュリティチェックなど、実務でもよく使われる場面が多くあります。
3. インタセプタ用のアノテーションを作る
QuarkusのCDIインタセプタでは、最初に専用のアノテーションを作成します。 このアノテーションが目印となり、どのメソッドにインタセプタを適用するかを指定できます。 アノテーションは「付箋」のようなイメージで、後から処理を追加するための合図になります。
import jakarta.interceptor.InterceptorBinding;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
public @interface LoggingInterceptor {
}
4. インタセプタクラスを定義する
次に、実際の処理を書くインタセプタクラスを作成します。 ここでは、メソッドの開始と終了をコンソールに表示するシンプルな例を紹介します。 初心者の方は、まず「前に動く」「後に動く」という流れを意識すると理解しやすくなります。
import jakarta.interceptor.AroundInvoke;
import jakarta.interceptor.Interceptor;
import jakarta.interceptor.InvocationContext;
@LoggingInterceptor
@Interceptor
public class SimpleLoggingInterceptor {
@AroundInvoke
public Object logMethod(InvocationContext context) throws Exception {
System.out.println("処理開始: " + context.getMethod().getName());
Object result = context.proceed();
System.out.println("処理終了: " + context.getMethod().getName());
return result;
}
}
5. インタセプタを適用するクラス
作成したインタセプタは、通常のCDI管理クラスに適用できます。 Quarkusでは、サービスクラスやビジネスロジックにアノテーションを付けるだけで有効になります。 この方法なら、既存のコードを大きく書き換えずに共通処理を追加できます。
import jakarta.enterprise.context.ApplicationScoped;
@ApplicationScoped
@LoggingInterceptor
public class GreetingService {
public String hello(String name) {
return "こんにちは、" + name + "さん";
}
}
6. 実行時の動きと確認ポイント
Quarkusアプリケーションを起動してメソッドが呼ばれると、インタセプタの処理が自動的に実行されます。 ログを見ることで、メソッドの前後に処理が挟まれていることが確認できます。 初心者の方は、まずはコンソール出力を使って動作を確認するのがおすすめです。 この確認作業を通して、CDIインタセプタの仕組みが体感できます。
処理開始: hello
処理終了: hello
7. インタセプタを使うときの注意点
CDIインタセプタは便利ですが、使いすぎると処理の流れが見えにくくなることがあります。 初心者のうちは、ログ出力や簡単なチェック処理など、目的を絞って使うのがポイントです。 また、QuarkusのDI管理下にあるクラスでないとインタセプタは動作しません。 この点を理解しておくと、エラーで悩む時間を減らせます。
8. CDIとインタセプタで広がる設計の考え方
QuarkusのCDIインタセプタを学ぶことで、オブジェクト指向や設計の考え方も自然に身につきます。 共通処理を一か所に集める発想は、実務の現場でも非常に重要です。 DIとCDIを組み合わせることで、テストしやすく、読みやすいコードが書けるようになります。 初心者の段階でこの考え方に触れておくと、後の学習がスムーズに進みます。