[spring boot7]AOPを使ってログ出力してみよう

[spring boot7]AOPを使ってログ出力してみよう

AOPとは

AOPとは、アスペクト指向プログラミングの略です。

これは、各クラスで共通する処理を抜き出して、まとめて管理する方法のことです。

使用環境

MacBook Pro (15-inch, 2016)

Eclipse:Oxygen.3a Release (4.7.3a)

spring boot バージョン:2.1.0

使用ライブラリ:DevTool,Lombok,H2,JDBC,Thymeleaf,Web

AOPを使うための準備

pom.xmlに以下を追加します。

これを記入したら

プロジェクトを右クリック ➡︎ Maven ➡︎ プロジェクトの更新

を選択してください。

ここまでできたら、AOPの実装にうつります。

 AOPの実装

ここから、AOPを実装していきます。

ここでは、以下の6つの方法を順を追って紹介します。

また、使用するコードは

LogAspect.java

になります。

① @Before、@Afterを使ったAOP(1つのControllerに対して)

LogAspect.javaを以下のようにしてください

AOPのクラスには

@Aspect

@Component

2つのアノテーションをつけます

AOPを実行するメソッドには

@Before

@After

をつけて、その引数にどのクラスの何のメソッドが呼ばれたらAOP実行メソッドを起動するか選択しています。

ここでspringbootを起動してログイン画面にアクセスします。

この時、コンソールを見て

となっていればOKです。

これで、LoginControllerのgetLogin()が呼ばれる度にログを出すことができます。

が、この設定ではLoginControllerしかログが出せないので、

今後Controllerが増えた時に全てのControllerで表示できるように

LogAspect.javaを変更します。

② @Before、@Afterを使ったAOP(全てのControllerに対して)

最初の*で全ての戻り値を指定

*..*で全パッケージを指定

.*Controllerとすると、語尾にControllerがつくクラスを指定

.*(..)は全てのメソッド、全ての引数を指定

となり、他のControllerでもAOPを反映することができました。

試しに

http://localhost:8080/login

http://localhost:8080/signup

両方にアクセスして、コンソールを見てください。

このように、LoginControllerでもSignupControllerでもログが出ていれば完了です。

③ @Aroundを使ったAOP

次に、Aroundを使ったAOPの方法です。

簡単に言うと、

@Beforeと@Afterをまとめて使える便利なやつです。

LogAspect.javaを以下のように書き換えてください。

もう一度、

http://localhost:8080/login

http://localhost:8080/signup

両方にアクセスして、コンソールを見てください。

このように、LoginControllerでもSignupControllerでもログが出ていれば完了です。

④ Bean名でAOPの対象を指定する方法

DIに登録されているBean名でAOPの対象ができます。

⑤ @annotationでAOPの対象を指定する方法

@annotationを使うことで、指定したアノテーションが付いているメソッド全てを指定できます。

⑥ @withinでAOPの対象を指定する方法

@withinを使うことで、指定したアノテーションが付いているメソッド全てを指定できます。

 

AOPの使用は以上になります。