-S10: AntilockBrakeSystem
これまでコンテナ登録コンポーネントの初期化方法を説明してきました。さて、Seasar2のステキな機能の一つにAOPへの対応があります。AOPは数年前よりその概念はあり、AspectJなどのコンパイラベースで提供する製品はありましたが、最近、軽量コンテナには競って搭載される機能となりました。AOPがとにかくはじめての方も多いでしょうから、まずAOPそのものやSeasar2のAOPメカニズムを説明するまえに論よりRUN、例を示していきます。
list10-1. BrakingCar.java package tutorial.org.seasar.console; public class BrakingCar implements Car { public void run() { System.out.println("Brake!"); } }
list10-1のBrakingCarはコンストラクタ、プロパティ、初期化メソッドのまったくないシンプルなクラスです。インターフェイスCarに定義されているメソッドrun()のみを実装しています。そのrun()メソッドすらもシンプルです。文字列"Brake!"を出力するだけです。
list10-2. ABS.java package tutorial.org.seasar.console; import org.seasar.framework.aop.AroundAdvice; import org.seasar.framework.aop.Joinpoint; public class ABS implements AroundAdvice { public Object invoke(Joinpoint joinpoint) throws Throwable { System.out.println("Ooops, danger!"); Object ret = joinpoint.proceed(); System.out.println("kikikiki..."); return ret; } }
list10-2のABSはBrakingCarに追加的な文字列出力を行うクラスです。
lost10-3. <aspect>記述を行ったcar.xml修正版 <?xml version="1.0" encoding="UTF-8"?> <components> <component class="tutorial.org.seasar.console.BrakingCar"> <aspect pointcut="run"> <component class="tutorial.org.seasar.console.ABS"/> </aspect> </component> </components>
実行結果は、以下のとおりです。
Ooops, danger!
Brake!
kikikiki...
相変わらずつまらない例ですが、意外とすごいことが起こってるんですよ。