libro
www.tuyano.com
初心者のためのSpring Framework入門

AspectJを利用する (2/5)

作成:2015-07-18 08:25
更新:2015-07-18 08:25

■アスペクト・クラスを作成する

では、アスペクトで挿入する処理となるクラスを作成しましょう。今回は、AspectJを利用するため、前回とは違った形になります。

下のリストが、作成するサンプルです。com.tuyano.libro.aopパッケージに、「SampleAspect」というクラス名で作成をしましょう。

見ればわかるように、これはごく一般的なPOJOクラスです。何のインターフェイスも実装していませんし、何のクラスも継承していません。違うのは、アノテーションが付けられていることだけです。

@Aspect
これがアスペクト・クラスであることを示します。AspectJで利用するためのクラスは、このアノテーションをつけておきます。

@Before
これはメソッドの手前に付けます。メソッドの実行前に挿入される処理であることを示すアノテーションです。Spring AOPにあった「before」と同様のものと考えてよいでしょう。

@After
これもメソッドの手前に付けます。こちらはメソッドの実行後に挿入される処理であることを示すアノテーションです。Spring AOPにあった「afterRunning」に相当するものと考えるとよいでしょう。


――アノテーションそのものはシンプルです。わかりにくいのは、@Before@Afterの後にある()内の記述でしょう。これは以下のように記述されています。
("execution(……割り当てるメソッドの指定……)")

executionの後の()に、どのメソッドにこのメソッド挿入を行うかを指定します。これはパッケージ名からきっちりと正確にメソッドを指定する必要があります。ただし、すべての名前を記述しなければいけないわけではありません。

ここではワイルドカード(*)が利用できるので、それを利用して特定パッケージやクラス内のすべてのメソッドなどを指定できます。また指定するメソッドの引数にも、「..」という記号で不特定の引数を指定できます。

ここでの記述を見ると、以下のようになっていますね。
* com.tuyano.libro.aop.SampleAopBean.*(..)

わかりやすく、「不特定の値」を○○と記述すると、こんな具合に書かれていることがわかります。
○○ com.tuyano.libro.aop.SampleAopBean.○○(○○)

一番最初にある○○は、publicとかprivateといったものが指定された場合を考えてつけています。またSampleAopBeanの後の○○は、このクラス内にあるどんなメソッドも全て対象に指定するものです。また(○○)は、引数がどんな形であっても対象とするためのものです。

このexecutionの書き方がある程度わかれば、思い通りにAOP処理の対象となるメソッドを指定できるようになるでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

package com.tuyano.libro.aop;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class SampleAspect {

    @Before("execution(* com.tuyano.libro.aop.SampleAopBean.*(..))")
    public void before() {
        System.out.println("before:");
    }

    @After("execution(* com.tuyano.libro.aop.SampleAopBean.*(..))")
    public void after() {
        System.out.println("after:");
    }
}
※関連コンテンツ

「初心者のためのSpring Framework入門」に戻る