AspectJを利用する (4/5)
作成:2015-07-18 08:30
更新:2015-07-18 08:30
更新:2015-07-18 08:30
■プログラムを実行する
これでAspectJを利用する準備は整いました。では、Beanを利用してみましょう。com.tuyano.libro.aopパッケージのAppクラス(前回、使いましたね)を下のリスト欄のように書き換えて下さい。
これを実行すると、以下のように出力がされるでしょう。
ここでは、getMessageでメッセージを取得し、それを元にsetMessageでメッセージを設定し、それからprintMessageで内容を出力しています。それぞれのメソッドを呼び出すごとに、その実行前と実行後にbefore/afterが出力されていることがわかるでしょう。
前回のSpring AOPとの決定的な違いは、getBeanで取り出し実行するクラスです。Spring AOPでは、ProxyFactoryBeanを取得することでモディファイされたSampleAopBeanが得られるようになっていました。
が、今回、getBeanしているのはSampleAopBeanです。つまり、SampleAopBeanそのものが改変され、メソッドが挿入されているのです。
動作を確認したら、aopbean.xmlを開き、<aop:aspectj-autoproxy />タグを削除して下さい。そして実行すると、今度は「message:[<<this is AOP bean!>>]」だけが表示されます。before/afterに挿入されたはずのメソッドが消えていることがわかるでしょう。
このように、AspectJを使えば、オートプロキシのON/OFFだけで、アスペクトの処理の挿入や削除が簡単に行えてしまいます。使用するBeanをプロキシーBeanから元に戻したりすることもありません。
これを実行すると、以下のように出力がされるでしょう。
before:
after:
before:
after:
before:
message:[<<this is AOP bean!>>]
after:
ここでは、getMessageでメッセージを取得し、それを元にsetMessageでメッセージを設定し、それからprintMessageで内容を出力しています。それぞれのメソッドを呼び出すごとに、その実行前と実行後にbefore/afterが出力されていることがわかるでしょう。
前回のSpring AOPとの決定的な違いは、getBeanで取り出し実行するクラスです。Spring AOPでは、ProxyFactoryBeanを取得することでモディファイされたSampleAopBeanが得られるようになっていました。
が、今回、getBeanしているのはSampleAopBeanです。つまり、SampleAopBeanそのものが改変され、メソッドが挿入されているのです。
動作を確認したら、aopbean.xmlを開き、<aop:aspectj-autoproxy />タグを削除して下さい。そして実行すると、今度は「message:[<<this is AOP bean!>>]」だけが表示されます。before/afterに挿入されたはずのメソッドが消えていることがわかるでしょう。
このように、AspectJを使えば、オートプロキシのON/OFFだけで、アスペクトの処理の挿入や削除が簡単に行えてしまいます。使用するBeanをプロキシーBeanから元に戻したりすることもありません。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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("aopbean.xml"); SampleAopBean bean = (SampleAopBean) app.getBean("sampleAopBean"); String msg = bean.getMessage(); bean.setMessage("<<" + msg + ">>"); bean.printMessage(); } }
※関連コンテンツ
「初心者のためのSpring Framework入門」に戻る