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前のメソッド。