-アスペクト適用

Seasar2AOPのドキュメントより。。。

pointcut属性を指定しない場合、すべてのメソッドが対象になるわけではありません。実装しているインターフェースのすべてのメソッドが対象になります。すべてのメソッドを対象にするには、pointcut属性に".*"と指定します。

RTTIを整理したら、隠れバグを発見。メソッドの検索でスーパークラスに行ってませんでした。新RTTIではスーパークラスを当然見るようにしてますし、その際に被オーバーライドメソッドはきちんと除外してます(この実装が難しかった)。しかし、このポイントカットの設定を省略している場合をやってなかったのです。今は常に".*"で動いています。
この問題、finalやstatic問題を対応したときにうすうす気が付いていたのですが、面倒なので見ないフリしていたところ、新RTTIできちんとメソッド検索機能を実装しなおしたら、Objectのfinalメソッド群のおかげで大量のワーニングがでるようになってしまいました。やばいね、すぐみんな気が付くね。しゃあない、きちんとやります。まずはS2を実際に動かしてみて、挙動を検証します。
追記
うみゅ?スーパークラスのメソッドは検索しないのか?。。。と思ったが、スーパーも全検索ね。よかったよかった。".*"でやるとObjectのfinalなnotifyAll、getClass、wait、notifyを警告してくれます。
さらに追記

  • [バグ] RTTIにおいてメソッドの一覧を取得する際に、スーパークラスを検索していなかったバグを修正しました
  • [バグ] aspectエレメントのpointcut属性の設定を省略したときに、アスペクト適用メソッドはコンポーネントの全メソッドを適用してしまっていた問題を、S2の仕様どおりに実装しているインターフェイスのメソッドのみとするように修正しました