カテゴリ: Quarkus 更新日: 2026/01/23

Quarkusで学ぶCDIインタセプタ活用入門!初心者でもわかる@Interceptorの使い方

CDIのインタセプタ(@Interceptor)をQuarkusで活用する
CDIのインタセプタ(@Interceptor)をQuarkusで活用する

先生と生徒の会話形式で理解しよう

生徒

「QuarkusのDIやCDIは少しずつ分かってきたんですが、インタセプタって何をするものなんですか?」

先生

「インタセプタは、メソッドの前後に共通処理を差し込む仕組みです。ログ出力や処理時間の計測などをまとめて書けます。」

生徒

「メソッドの中に直接書かなくていいんですか?」

先生

「はい。QuarkusではCDIのインタセプタを使うことで、業務ロジックをきれいに保てます。順番に見ていきましょう。」

1. CDIインタセプタとは何か

1. CDIインタセプタとは何か
1. CDIインタセプタとは何か

CDIインタセプタは、QuarkusやJava EEで使われる仕組みで、特定の処理の前後に共通の動作を追加するための機能です。 例えば、メソッドが呼ばれた瞬間にログを出したり、処理が終わった後に時間を記録したりといった用途があります。 初心者のうちは、同じようなコードを何度も書いてしまいがちですが、インタセプタを使うと共通処理を一か所にまとめられます。 これにより、QuarkusのDIとCDIの考え方を自然に理解でき、保守しやすいコードになります。

2. Quarkusでインタセプタを使うメリット

2. Quarkusでインタセプタを使うメリット
2. Quarkusでインタセプタを使うメリット

QuarkusでCDIインタセプタを活用すると、アプリケーション全体の構造が分かりやすくなります。 業務ロジックと共通処理を分離できるため、コードの見通しが良くなり、初心者でも理解しやすくなります。 また、Quarkusは起動が高速で軽量なフレームワークなので、インタセプタを使ってもパフォーマンスへの影響が少ない点も特徴です。 ログ管理、トランザクション制御、簡易的なセキュリティチェックなど、実務でもよく使われる場面が多くあります。

3. インタセプタ用のアノテーションを作る

3. インタセプタ用のアノテーションを作る
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. インタセプタクラスを定義する

4. インタセプタクラスを定義する
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. インタセプタを適用するクラス

5. インタセプタを適用するクラス
5. インタセプタを適用するクラス

作成したインタセプタは、通常のCDI管理クラスに適用できます。 Quarkusでは、サービスクラスやビジネスロジックにアノテーションを付けるだけで有効になります。 この方法なら、既存のコードを大きく書き換えずに共通処理を追加できます。


import jakarta.enterprise.context.ApplicationScoped;

@ApplicationScoped
@LoggingInterceptor
public class GreetingService {

    public String hello(String name) {
        return "こんにちは、" + name + "さん";
    }
}

6. 実行時の動きと確認ポイント

6. 実行時の動きと確認ポイント
6. 実行時の動きと確認ポイント

Quarkusアプリケーションを起動してメソッドが呼ばれると、インタセプタの処理が自動的に実行されます。 ログを見ることで、メソッドの前後に処理が挟まれていることが確認できます。 初心者の方は、まずはコンソール出力を使って動作を確認するのがおすすめです。 この確認作業を通して、CDIインタセプタの仕組みが体感できます。


処理開始: hello
処理終了: hello

7. インタセプタを使うときの注意点

7. インタセプタを使うときの注意点
7. インタセプタを使うときの注意点

CDIインタセプタは便利ですが、使いすぎると処理の流れが見えにくくなることがあります。 初心者のうちは、ログ出力や簡単なチェック処理など、目的を絞って使うのがポイントです。 また、QuarkusのDI管理下にあるクラスでないとインタセプタは動作しません。 この点を理解しておくと、エラーで悩む時間を減らせます。

8. CDIとインタセプタで広がる設計の考え方

8. CDIとインタセプタで広がる設計の考え方
8. CDIとインタセプタで広がる設計の考え方

QuarkusのCDIインタセプタを学ぶことで、オブジェクト指向や設計の考え方も自然に身につきます。 共通処理を一か所に集める発想は、実務の現場でも非常に重要です。 DIとCDIを組み合わせることで、テストしやすく、読みやすいコードが書けるようになります。 初心者の段階でこの考え方に触れておくと、後の学習がスムーズに進みます。

カテゴリの一覧へ
新着記事
New1
Quarkus
Quarkusのフォーム認証を基礎から解説!初心者向けセキュリティ入門ガイド
New2
Micronaut
MicronautプロジェクトをGradleで管理する基礎!build.gradleの役割を解説
New3
Micronaut
LinuxでMicronautをセットアップする方法!パッケージ管理とGradle連携
New4
Java
Javaのswitch文を徹底解説!case・defaultの書き方と実例まとめ
人気記事
No.1
Java&Spring記事人気No1
Quarkus
Quarkusプロジェクト構成の基本を完全解説!初心者でも迷わない「どこに何を書くか」ガイド
No.2
Java&Spring記事人気No2
Quarkus
QuarkusとMicronautとHelidonを徹底比較!軽量Javaフレームワークの違いを初心者向けに解説
No.3
Java&Spring記事人気No3
Quarkus
Quarkusのセキュリティ基礎を初心者でもわかるように解説!
No.4
Java&Spring記事人気No4
Quarkus
Quarkusの開発環境構築で躓きやすいポイントを完全解説!初心者でも安心して始めるためのチェックガイド
No.5
Java&Spring記事人気No5
Micronaut
MicronautとSpring Bootの違いとは?アーキテクチャ比較で速さの秘密を理解する
No.6
Java&Spring記事人気No6
Quarkus
Quarkusでマイクロサービス開発が加速する理由を徹底解説!Java初心者でも分かるクラウドネイティブ
No.7
Java&Spring記事人気No7
Java
Javaのboolean型の使い方を完全ガイド!真偽値と条件分岐の基本
No.8
Java&Spring記事人気No8
Micronaut
MicronautのAOPが高速な理由とは?コンパイル時AOPの仕組みを初心者向けに徹底解説