Aspectjの@Aroundを使ってメソッド前後に処理を入れる

spring

@Aroundを使って、メソッド前後に処理を織り込む(インジェクション)方法を解説します。@Aroundでは、@Before、@Afterとは違って、AOPクラス内で対象のメソッドを実行します。

設定方法は、「@Before、@After」はほぼ同等なので使い方に迷ってしまうことはないと思います。
どのような動作をするのか?というところだけをおさえておけば問題ありません。

[スポンサーリンク]

目次

  1. メソッド前後に特定の処理を入れる

メソッド前後に特定の処理を入れる

@Aspect
@Component
public class AroundAspect {

	@Around("execution(* com.example..*.*(..))")
	public String around(ProceedingJoinPoint pj) throws Throwable {
		System.out.println("このログは、@Aroundを使って、メソッド処理「前」に実行しています。");

		// ここで対象のメソッドを呼び出します。
		String message = (String)pj.proceed();

		System.out.println("このログは、@Aroundを使って、メソッド処理「後」に実行しています。");

		// メソッドの戻り値を返却しています。
		return message;
	}

}

解説

「execution」で指定したクラスがインジェクション(織り込み)対象のメソッド(クラス)です。

「execution」の記述形式については、こちらを参照して下さい。
executionの記述方法についてまとめました

注意

@Aroundでは、必ず「戻り値」を指定して下さい。こちの「戻り値」がAOPから呼ばれるメソッドの戻り値となります。この戻り値がないと思わぬ誤動作を起こします。

最後に

当ブログでは、代表的なAOPの「@Around、@Before、@After、@AfterThrowingn」について解説を行ってきました。今後は他アノテーションについても記述していきたいと思います。