-スピッツとくるりとJoinpointImpl#proceed()

色色衣」の座談会の解説がスピッツオフィシャルWEBにあると知って見に行ったところ、座談会に出ていた「くるり」は、やはり日曜日にたまたま買って知ったバンド「くるり」でした。店でかかってた音にひっかかって買ったので(早口ことば)、なにか琴線ふれる共通点があったのでしょう。プログラムコードのことはわかっても、音楽のコードのことはわからんのです。素人ですから。一方で、このBLOGで燃えているTapestrySeasar2といったところや、AOP-IoCコンテナのこととかは、職業でプログラム(もっというと、職業でJava?)やってないと共感しえないのかと思いました。このBLOGはとても楽しく書いてるのですが、もしかすると私にとってのスピッツの座談会のように、意外とつまらないかもしれませんね。ところどころ楽しめても(まあ、座談会は結構楽しめましたが)、おそらく軸を伝え得ないかも。
Java読めるなら、Seasar2のorg.seasar.framework.aop.impl.JoinpointImpl の以下の11行はなんてことないはずです。

public Object proceed() throws Throwable {
  while (aspectsIndex_ < aspects_.length) {
    Aspect current = aspects_[aspectsIndex_];
    ++aspectsIndex_;
    Pointcut pointcut = current.getPointcut();
    if (pointcut.isApplied(method_)) {
      return current.getAroundAdvice().invoke(this);
    }
  }
  return methodProxy_.invokeSuper(target_, args_);
}

もちろん前後ないとわかるわけがないですが。。。実はSeasar2AOP機能のシーケンス図を描いたときに、ほぼ半分ぐらいのメッセージがこのメソッドひとつで終わってます。上記のコードででてくるAroundAdvice#invoke()とのやりとりだけで終わらせています。AroundAdvice#invoke()はここに例示できません。なぜならAroundAdviceはインターフェイスだからです。フレームワークとしての実装はないのです。おそらく私はスピッツとくるりに共通する何かのように、プログラムだったらこのJoinpointImpl#proceed()メソッドに響くのでしょう。AOPって簡単でしょ、たったこれだけ11行ですよ(と言い切るとかなり、いや相当ウソだが。。。)。