Spring BootのAOP(アスペクト指向プログラミング)のサンプルです。
AOPは、Aspect Oriented Programmingの略です。
| 確認環境 ・Windows10 ・STS 3.9.6 ・JDK 10.0.2 ・Spring Boot 2.0.5 |
目次
環境
今回作成/修正するファイルは以下の赤枠の部分です。

1.pom.xmlの設定
pom.xmlのdependenciesの箇所に以下の2-5行目を追記します。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies>
2.AOPのファイル(TestLog.java)
AOPを行うファイルです。
package com.example.demo;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class TestLog {
@After("within(com.example.demo.MainController)")
public void write1() {
System.out.println("ログテスト後");
}
}
6行目は、@Aspectアノテーションです。このクラスはAOPとして動作するようになります。
10行目は、処理を実行する「タイミング」と「場所」を指定しています。
「タイミング」は、After=処理の後にです。
@Afterアノテーションの他に、@Before、@AfterReturning、@AfterThrowing、@Aroundがあります。それらは、Adviceと呼ばれます。
「場所」は、com.example.demoパッケージのMainControllerクラスのwithin(クラスの中のメソッド)です。PointCut式といいます。withinは、指定子です。
12行目は、連携先のメソッドが実行された後にコンソールに文字列を表示します。
連携先のクラスやメソッドに連携のための何らかの記述は不要です。
参考:
SpringのAOPについて
Spring AOP ポイントカット指定子の書き方について
3.コントローラのファイル(MainController.java)
コントローラのファイルです。
package com.example.demo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MainController {
@RequestMapping("/test1")
public String input1() {
return "test1";
}
@RequestMapping("/test2")
public String input2(){
return "test2";
}
}
ブラウザで以下のURLにアクセスするごとに、コンソールにAOPのファイルで指定した文字列が表示されます。
http://localhost:8080/test1
http://localhost:8080/test2
以下は、文字列がコンソールに表示された例です。

関連の記事
Java Spring Bootでhello worldを表示するサンプル
Java Spring Boot フォームの値を別画面に渡すサンプル
Java Spring Boot MySQLに接続してselectするサンプル(JPA)
Java Spring Boot DI(依存性の注入)のサンプル
Java Spring Boot JSONの送信と受信のサンプル