「Spring Boot」AOP(アスペクト指向プログラミング)にメソッド名で対象のJoin Pointを選択
1.依存関係ライブラリの追加
ファイル:pom.xml
下記を追加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
2.@Aspectアノテーションを使用する
Pointcut:実行対象のJoin Pointを選択する表現(式)のこと。
Join Pointのグループと捉えられる。
書式
@Before(“execution(* *..*Controller.create*(..))")
使用例
package com.arkgame.study;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
//アノテーション@Aspect
@Aspect
@Component
public class AopTest {
//*Controllerというクラスのcreate*メソッドで実行
@Before("execution(* *..*Controller.create*(..))")
public void getMsg(JoinPoint jpt) {
System.out.println("メソッド開始: " + jpt.getSignature());
}
}
package com.arkgame.study;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
//アノテーション@Aspect
@Aspect
@Component
public class AopTest {
//*Controllerというクラスのcreate*メソッドで実行
@Before("execution(* *..*Controller.create*(..))")
public void getMsg(JoinPoint jpt) {
System.out.println("メソッド開始: " + jpt.getSignature());
}
}
package com.arkgame.study; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.stereotype.Component; //アノテーション@Aspect @Aspect @Component public class AopTest { //*Controllerというクラスのcreate*メソッドで実行 @Before("execution(* *..*Controller.create*(..))") public void getMsg(JoinPoint jpt) { System.out.println("メソッド開始: " + jpt.getSignature()); } }
3.コントローラのクラス
package com.arkgame.study;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
//アノテーションRestController
@RestController
public class SampleController {
//アノテーションGetMapping
@GetMapping("/cftA")
public String createUser() {
return "create user sample";
}
//アノテーションGetMapping
@GetMapping("/cftB")
public String createEmp() {
return "create employee sample";
}
}
package com.arkgame.study;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
//アノテーションRestController
@RestController
public class SampleController {
//アノテーションGetMapping
@GetMapping("/cftA")
public String createUser() {
return "create user sample";
}
//アノテーションGetMapping
@GetMapping("/cftB")
public String createEmp() {
return "create employee sample";
}
}
package com.arkgame.study; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; //アノテーションRestController @RestController public class SampleController { //アノテーションGetMapping @GetMapping("/cftA") public String createUser() { return "create user sample"; } //アノテーションGetMapping @GetMapping("/cftB") public String createEmp() { return "create employee sample"; } }
4.実行結果
http://127.0.0.1:8788/cftA
結果 create user sample
http://127.0.0.1:8788/cftB
結果 create employee sample
コンソールに下記を表示
メソッド開始: String com.arkgame.study.SampleController.createUser()
メソッド開始: String com.arkgame.study.SampleController.createEmp()