AOPの利用 (5/6)
作成:2015-07-12 13:28
更新: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として取り出すことができるのです。
では、取り出したSampleAopBeanのprintMessageを呼び出す処理はどういう出力をしているでしょうか。見てみると、こうなっているでしょう。
1つ目のSampleAopBeanは、単にprintMessageの出力がされるだけです。が、2つ目のSampleAopBeanでは、printMessageの実行前と後に、SampleMethodAdviceクラスに用意されているbefore/afterReturningの実行結果が挿入されているのがわかります。メソッドの実行前後に自動的に別の処理がつかされているのです。
これが、AOPの威力です。getBeanで取得するBeanをProxyFactoryBeanにすることで、こんな具合に自動的に処理が追加されるようになります。不要になったら、getBeanの引数をSampleAopBeanに戻せばいいのです。
実行すると、bean.xmlからSampleAopBeanを取り出し、printMessageを実行します。が、よく見ると、2回、繰り返していますね?
1つ目のSampleAopBeanは、getBean("sampleAopBean")で取り出しています。これは今まで通りのやり方です。そして2つ目は、getBean("proxyFactoryBean")で取り出しています。これじゃ、取り出されるのはProxyFactoryBeanのように思いますが、ちゃんとSampleAopBeanにキャストし、SampleBeanとして機能します。
これが、ProxyFactoryBeanの不思議な機能です。このBeanは、targetプロパティで指定したBeanとして取り出すことができるのです。
では、取り出したSampleAopBeanのprintMessageを呼び出す処理はどういう出力をしているでしょうか。見てみると、こうなっているでしょう。
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に戻せばいいのです。
(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("bean.xml"); SampleAopBean bean1 = (SampleAopBean) app.getBean("sampleAopBean"); bean1.printMessage(); System.out.println("--------------------"); SampleAopBean bean2 = (SampleAopBean) app.getBean("proxyFactoryBean"); bean2.printMessage(); } }
※関連コンテンツ
「初心者のためのSpring Framework入門」に戻る