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

AOPの利用 (3/6)

作成:2015-07-12 13:22
更新:2015-07-12 13:22

■MethodBeforeAdviceクラスの作成

続いて、このSampleAopBeanにAOPで挿入する処理を用意しましょう。これも、もちろんJavaのクラスとして定義します。

com.tuyano.libro.aopパッケージ内に、「SampleMethodAdvice」という名前でクラスを作成しましょう。そして下のリスト欄のようにコードを記述して下さい。

今回作成したSampleMethodAdviceは、2つのインターフェイスを実装しています。このインターフェイスにより、処理の挿入に関するメソッドを追加します。それぞれ簡単に整理しましょう。

●MethodBeforeAdvice
これは、メソッドの実行前に処理を挿入するためのインターフェイスです。これは「before」というメソッドを1つ持っており、以下のように定義されています。
public void before(Method method, Object[] args, Object target) 
    throws Throwable

Methodは対象となるメソッド、argsはその引数、targetは対象となるオブジェクト(インスタンス)がそれぞれ渡されます。これらの引数により、どのインスタンスのどのメソッドが呼び出される前にこの処理が実行されたかを知ることができます。

●AfterReturningAdvice
これは、メソッドの実行が終わり、呼び出し元に戻される際に挿入する処理のインターフェイスです。「AfterReturningAdvice」というメソッドが用意されています。これは以下のように定義されています。
public void afterReturning(Object returnValue, Method method, 
    Object[] args, Object target) throws Throwable

メソッドの返値、メソッド、メソッドに渡された引数、ターゲットのインスタンスといったものが引数に渡されます。返値以外は上のbeforeと同じなので、ほぼ同じ感覚で扱うことができるでしょう。

――ここでは、それぞれメソッドとターゲットをSystem.out.printlnで出力しているだけです。AOPは、「処理を挿入する」といいましたが、どこでもいいから好き勝手に挿入するというわけではありません。「このタイミングで挿入する」ということがあらかじめいくつか用意されているのです。

とりあえず、この2つのインターフェイスを覚えれば、「メソッドの呼び出し前と呼び出し後」に処理を挿入できるようになります。AOPの基本を覚えるには十分でしょう。

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

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

●プログラム・リスト●

package com.tuyano.libro.aop;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;

public class SampleMethodAdvice 
        implements MethodBeforeAdvice, AfterReturningAdvice {

    @Override
    public void before(Method method, Object[] args, 
            Object target) throws Throwable {
        System.out.println("*before: " + method.getName() + "[" + target + "]");
    }

    @Override
    public void afterReturning(Object returnValue, Method method, 
            Object[] args, Object target) throws Throwable {
        System.out.println("*after: " + method.getName() + "[" + target + "]");
    }

}
※関連コンテンツ

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