Spring AOPを試してみた

AOPとはAspect Oriented Programmingの頭文字をあてたもの。
ログの出力処理などの共通処理をアプリケーションの処理から分離する技術です。
元のアプリケーション処理に手を加えることなく処理を追加する事ができます。
AOPの用途は、ログ処理、トランザクション管理、認証チェックなどデバックに近い処理に用いられます。アプリケーション処理の様な重い処理には向いていません。
今回は、AOPの動きを確認するために、Controllerの処理の間にAOPでログを出す超簡単なプログラムを書きました。

スポンサーリンク

Controller作成

htmlを用意するのが面倒くさいので、@RestControllerを使用します。

package com.example.demo;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class HelloAopController {

	@RequestMapping("/test1")
	public String input1() {
		return "test1";
	}

	@RequestMapping("/test2")
	public String input2() {
		return "test2";
	}

}

Aspect用クラスの作成

Aspectとは、Advice(ログ処理などが埋め込まれる処理)とJoinPoint(Adviceを埋め込む場所のこと)をまとめた名称になります。
Adviceの種類は、Before、After、Aroundなどがあります。
AdviceとJoinPoint参考サイト: https://qiita.com/ughirose/items/a7c66782f93cd1ae0d68

下記では、test1とtest2というURLにアクセスしたら、start endをコンソール上に表示する処理を加えています。
Aspectのポイントは、ポイントカットで実行対象のパッケージが細かく指定できることろです。

package com.example.demo;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component

public class HelloAopLog {

	// 注入したいデータを入れる
	@Before("within(com.example.demo.HelloAopController)")
	public void write1() {
		System.out.println("start");
	}

	@After("within(com.example.demo.HelloAopController)")
	public void write2() {
		System.out.println("end");
	}

}
タイトルとURLをコピーしました