2015-10-13 30 views
0

我正在經歷AspectJ。但是,我無法弄清楚使用+登錄連接點簽名。aspectj +符號如何爲繼承方法工作?

例如:

call(String Stack+.pop()); 

自定義堆棧:

public class Stack { 

    public String pop() { 
    return "abc"; 
    } 

} 


public class StackSubclass extends Stack{ 

} 


public aspect SimpleAspect { 

    pointcut p1(): call (String Stack+.pop()); 

    before() : p1() { 
    System.out.println("Before advice"); 
    } 
} 


public class Main { 

    public static void main(String[] args) { 
     StackSubclass obj = new StackSubclass(); 
     System.out.println(obj.pop()); 
    } 

} 

輸出:

Before advice 
abc 

沒有+登錄方面:

public aspect SimpleAspect { 

    pointcut p1(): call (String Stack.pop()); 

    before() : p1() { 
    System.out.println("Before advice"); 
    } 
} 

輸出:

Before advice 
abc 

所以,我的問題是什麼是+符號的意義是什麼?因爲有+和無+符號,輸出是相同的。

+0

看看這裏的第一個答案http://stackoverflow.com/questions/2847640/spring-aop-pointcut-that-matches-annotation-on-interface/2848161#2848161 –

+0

謝謝!但是,在繼承方法調用的情況下,父切入點將始終捕獲子節點上的事件。請看看我的代碼。 – Touchstone

回答

0

在這兩種情況下,切入點都應用於方法Stack.pop(),因爲StackSubclass不覆蓋pop()