AOPで共通処理を仕込む

SpringBootでは AOPという手法がよく使われます。

AOP

アスペクト指向プログラミングの略語です。

複数の箇所に記述したいような共通処理を、適応箇所に記述せずに、別クラスに分離して横断的に記述する手法のことを指します。

具体的にどのようなものなのか、サンプルコードを追って説明していきます。
(本記事のコードはgithubに置いてあります。)

 

1.AspectInterceptorClassを作成する。

 

@Aspect アノテーションは、AOPを実現するためのInterceptorクラスであることを表現します。

@Before アノテーションを、ポイントカット指示子(条件文)を引数に、挟み込みたい処理を記述したメソッドに付与します。条件に一致したメソッドの実行前に、指定したメソッド(invokeBefore())を実行します。

 

例のポイントカット指示子は、spring.sample.aopパッケージ以下のpublicな全てのメソッドが条件となります。

 

@Before アノテーションのように、ある処理の前後に指定した処理を挟むアノテーションを、Advisor と表現します。

 

2.様々なAdvisorを追加する。

他の種類のAdvisorも定義できます。メソッドの呼び出し前後に処理を挟み込める@Around をAdvisorとして追加します。

③ @Aroundアノテーションでは、実際のメソッドの実行を proceedingJoinPoint.proceed(); で行い、その前後に挟み込みたい処理を記述します。

Advisorにどのようなものがあるかは、ドキュメントを参考にしてみてください。

 

3.実際に動かしてみる。

例ではサンプルコードを起動させ、http://localhost:8888/test/1 アクセスします。
すると、アプリケーション内のtestById() メソッドが実行されます。

 

APIが実行される度に、上のようなログが出力されます。ここで重要なのは、

APIが実行されるメソッド内に、直接ログ出力処理を記述していない

ということです。

このようにして、ある処理を外側から横断的に差し込む考え方をAOPと言います。

 

 

コメントを残す

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