Spring Bootを学んでいると「AOP」という言葉が出てきます。
なんとなく便利そうだけど、正直よく分からない…という人も多いはずです。
この記事では、AOPの仕組みをできるだけシンプルに、実務での使いどころまで含めて解説します。
AOPとは何か
AOP(Aspect Oriented Programming)は、
共通処理を本来の処理とは別の場所に切り出し、自動で差し込む仕組みです。
例えば以下のような処理は、どのAPIでも毎回書きがちです。
- ログ出力
- 認証チェック
- 実行時間の計測
これらを毎回コントローラに書くのではなく、
別のクラスにまとめて、必要な場所にだけ適用できます。

なぜAOPが必要なのか
通常の実装では、共通処理はこうなりがちです。
public void sample() {
System.out.println(“start”); doSomething(); System.out.println(“end”);
}
一見シンプルですが、同じコードが増えていくと
- 修正漏れが起きる
- 可読性が落ちる
- 本来の処理が見えにくくなる
といった問題が出てきます。
AOPを使うと、こう書けます。
public void sample() {
doSomething();
}
ログ処理は外部で管理され、必要なタイミングで自動的に実行されます。
AOPの基本用語
ここはつまずきやすいので、最小限だけ押さえます。
Advice(アドバイス)
AOPで実行される処理そのもの
(例:ログ出力、認証チェック)
Pointcut(ポイントカット)
どこに適用するかの条件
(例:特定のパッケージ、特定のメソッド)
JoinPoint(ジョインポイント)
処理が実行されるタイミング
(例:メソッドの実行前・実行後・例外時)
実装例(Spring Boot)
@Aspect
@Component
public class LogAspect { @Before(“execution(* com.example.controller..*(..))”)
public void logStart(JoinPoint joinPoint) {
System.out.println(“開始: ” + joinPoint.getSignature());
}
}
このコードの意味
@Before("execution(* com.example.controller..*(..))")
これは、
controller配下のすべてのメソッドが実行される前に処理を挟む
という意味です。
AOPのよくある使いどころ
実務では主に以下で使われます。
- ログの出力(開始・終了)
- APIのリクエスト/レスポンスの記録
- 実行時間の計測
- 認証・認可チェック
- トランザクション管理
注意点
AOPは便利ですが、使いすぎると
- 処理の流れが見えにくくなる
- デバッグが難しくなる
というデメリットもあります。
そのため、
「どの機能でも共通で必要な処理」に限定して使うのがポイントです。
まとめ
AOPは、
- 共通処理をまとめるための仕組み
- コードをシンプルに保つための技術
- Springでは簡単に実装できる
という特徴があります。
最初は難しく感じますが、
「ログを外に出す仕組み」と考えると一気に理解しやすくなります。

コメント