2

Aspectj に関する問題で困惑しました。私がやろうとしているのは、メソッドレベルのアノテーションでアノテーションが付けられた呼び出しに対して「after() スロー」マッチを行うことです。

@MyAnnotation    
public void doSomething(Param p1, Param p2)

私が使用する場合

after() throwing(MyCustomException ex) : call (@com.me.MyAnnotation * *.*(..))

機能しますが、注釈にいくつかのパラメーターを追加した場合、それらは一致しません。

@MyAnnotation(value = "doobery")    
public void doSomething(Param p1, Param p2)

ポイントカットから何が欠けていますか??

明確にするために、両方の例を一致させたいと思いますが、注釈のパラメーターも気にしません。

AspectJ 1.6 のバージョン

4

1 に答える 1

2

ハ!とった。

手がかりは、織られていたものから痕跡を見ることでした。一部のメソッドが織り込まれ、他のメソッドが織り込まれていないことがわかりました。しかし、私が突破口を見つけたのは、方法の織り方の複製でした。

私は「呼び出し」を使用していました-したがって、ウィーブはメソッドの呼び出しでのみ発生していたため、一致するメソッドへの複数の呼び出しでクラスがウィービングされている場合、それらは複数回表示されました。

メソッドが呼び出されていなくても、メソッドでウィーブが発生するように、「実行」に切り替える必要がありました。

私のアドバイスを次のように変更しました。

after() throwing(MyCustomException ex) : execution (@com.me.MyAnnotation * *(..))
于 2012-12-05T21:56:18.777 に答える