Spring BootでAOP(アスペクト指向)を使うとコードが奇麗になる(@Aspect,@Before,@Afterなど)

Spring BootでAOP(アスペクト指向)を使うとコードが奇麗になる

オブジェクト指向にアスペクト指向も取り入れるとソースが奇麗になります。

アスペクト指向というのは私が新人の時の社内勉強会で勉強したのですが当時はチンプンカンプンでよくわかりませんでした。

「横断的」という言葉が特に意味が分かりませんでしたが、すごく簡単に言うとプログラムの至る所でしている本来あるべきでない処理を全て纏める。だから横断的(アスペクト)という言葉を使うんだと思います。

一番わかりやすいのは、メソッドの開始終了のログなどは本来メソッドにあるべき処理ではありません。

こういうのを削除して、AOP指向を取り入れてログの処理は一つのクラスだけに任せます。

Spring BootにはAOPが用意されており、build.gradleのdependenciesに以下を追記します。

空のコントローラを作成します。何もしていないメソッドを2つ用意しただけです。

AOPコンポーネントを作成します。

AOPのクラスには@Aspectアノテーションを付与します。各アノテーションの意味です。

アノテーション 意味
@Before メソッド前に実行する
@After メソッド後に実行する

これでメソッドの開始終了ログが出力されるようになります。

メインクラスは以下のようにしておきます。

このSpring Bootアプリケーションを実行すると以下のようにログ出力されます。

コントローラにあるメソッドは本来あるべき処理を記述するだけで、ログ出力はAOPコンポーネントに任せるというように実装します。

これによって本来あるべきコーディングと本来ないべきコーディングを分離することができます。

JoinPointクラス

@Beforeや@Afterがついたメソッドは引数にJoinPointクラスを持ちます。

色々出来るのですが簡単に以下にいくつか紹介しておきます。jpはJoinPointのインスタンスです。

取得値 メソッド
クラス名を取得 jp.getSignature().getDeclaringType().getSimpleName()
メソッド名を取得 jp.getSignature().getName()
スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA