2017-07-05 2 views
0

私はいくつかの実装を持つマーカーインターフェイスを持っています。私の意図は、そのマーカーインターフェイスを実装するすべてのクラスで定義されているすべてのパブリックメソッドのアスペクトを追加することです。 次のように私は私の側面を定義した:AspectJ - 内句を内句から除外

@Around("within(x.y.z.MyInterface+) && execution(public * *(..))") 

を問題は、例えば、そのインタフェースを実装するクラスの一つに、この方法を検討し、これはまた、内部クラスをキャッチすることです:

public void foo() { 
    doSomething(new Request() { 
    @Override 
    public void do() { 
     System.out.println("Hi"); 
    } 
    }); 
} 

何らかの理由で、 MyInterfaceから継承していないにもかかわらず、アスペクトも "do()"メソッドをキャッチします。

私のアスペクト定義はどのように修正する必要がありますか?

答えて

0

代わりの"within""this"ポイントカット使用:この

@Around("this(x.y.z.MyInterface+) && execution(public * *(..))") 
"this"

基本的に一致するジョインポイント、時現在のオブジェクト参照を、MyInterfaceのインスタンスです。あなたのインターフェイスを実装していない匿名クラスはもはやマッチしません。 http://www.javaworld.com/article/2074048/core-java/i-want-my-aop---part-2.html?page=2

+0

ありがとう:

JavaWorldは、その上に素敵な記事があります! Spring AOPを使用している場合は、「ターゲット」も使用できることがわかりました。ちょうどそれが後で気付きました。 – duduamar