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

AOPの利用 (5/6)

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

■AOPを実行しよう!

さあ、これでようやく準備が整いました。では、実際にAOPを使ってみることにしましょう。com.tuyano.libro.aopパッケージに「App」クラスを作成し、下のソースコードのように記述してみてください。

実行すると、bean.xmlからSampleAopBeanを取り出し、printMessageを実行します。が、よく見ると、2回、繰り返していますね?

1つ目のSampleAopBeanは、getBean("sampleAopBean")で取り出しています。これは今まで通りのやり方です。そして2つ目は、getBean("proxyFactoryBean")で取り出しています。これじゃ、取り出されるのはProxyFactoryBeanのように思いますが、ちゃんとSampleAopBeanにキャストし、SampleBeanとして機能します。

これが、ProxyFactoryBeanの不思議な機能です。このBeanは、targetプロパティで指定したBeanとして取り出すことができるのです。

では、取り出したSampleAopBeanprintMessageを呼び出す処理はどういう出力をしているでしょうか。見てみると、こうなっているでしょう。
message:[this is AOP bean!]
--------------------
*before: printMessage[com.tuyano.libro.aop.SampleAopBean@de3a06f]
message:[this is AOP bean!]
*after: printMessage[com.tuyano.libro.aop.SampleAopBean@de3a06f]

1つ目のSampleAopBeanは、単にprintMessageの出力がされるだけです。が、2つ目のSampleAopBeanでは、printMessageの実行前と後に、SampleMethodAdviceクラスに用意されているbefore/afterReturningの実行結果が挿入されているのがわかります。メソッドの実行前後に自動的に別の処理がつかされているのです。

これが、AOPの威力です。getBeanで取得するBeanをProxyFactoryBeanにすることで、こんな具合に自動的に処理が追加されるようになります。不要になったら、getBeanの引数をSampleAopBeanに戻せばいいのです。

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

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

●プログラム・リスト●

package com.tuyano.libro.aop;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {

    public static void main(String[] args) {
        ApplicationContext app = new ClassPathXmlApplicationContext("bean.xml");
        
        SampleAopBean bean1 = (SampleAopBean) app.getBean("sampleAopBean");
        bean1.printMessage();

        System.out.println("--------------------");

        SampleAopBean bean2 = (SampleAopBean) app.getBean("proxyFactoryBean");
        bean2.printMessage();
    }

}

※関連コンテンツ

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