jquery-aop1.3 を調べ&使ってみた
Joinpoint
Joinpoint は、下記の組み合わせで指定できるメソッドの内部となる。
<オブジェクト, オブジェクトが持つメソッドの名称(※正規表現可能)>
上記で指定したメソッド内での位置のバリエーションは下記の通り。
- before a method
- after a method
- after a method throws an exception(afterThrow)
- after a method regardless of the results(afterFinally)
- around a method(※対象のメソッドを、対象のメソッドを引数として受け取る関数で置き換える)
- Add a new method using introductions ?? ←宿題
Joinpoint毎の、Adviceへの引数
around a method
{ arguments: 対象メソッド呼び出し時に渡された引数 , method: 対象メソッドの名称 , proceed: 対象メソッド }
他は宿題
Unweave
Weavingされた関数オブジェクトには、Unweave するためのメソッド unweave が付与されている。
Weavingの戻り値は、そのWeavingによってWeavingされた全ての関数オブジェクトの参照からなる配列なので、全てのWeavingを解除したい場合はこの配列を用いて網羅的に unweave すると簡単だ。
Weaving の組み合わせ検証
before を2度
Weavingした順番の逆順で、2つとも呼び出される。
after を2度
Weavingした順で、2つとも呼び出される。
after a method と after a method regardless of the results
Weavingした順で、2つとも呼び出される。
around を2度(※それぞれAdviceの最後で invocation.proceed(); を実行)
Weavingした順番の逆順で、2つとも呼び出される。
注意〜aroundは特別なWeaving〜
aroundの対象は、(もし対象のメソッドが既にaroundされている場合は)arround後のメソッド。
その一方、before および after の対象は、(対象のメソッドが既にaroundされている場合でも)arround前のメソッド。