2011-06-28 68 views
6

我想創建一個切入點來針對從特定方法調用方法。AspectJ切入點在特定方法中的方法調用

採取如下:

class Parent { 
    public foo() { 
    //do something 
    } 
} 

class Child extends Parent { 
    public bar1() { 
    foo(); 
    } 
    public bar2() { 
    foo(); 
    } 
    public bar3() { 
    foo(); 
    } 
} 

我想有在電話會議上的一個點切到foo()的方法BAR1()和BAR3()

我想這樣

pointcut fooOperation(): call(public void Parent.foo() && (execution(* Child.bar1()) || execution(* Child.bar3())); 

before() : fooOperation() { 
    //do something else 
} 

但是,似乎沒有工作。有任何想法嗎?

感謝

回答

2

想想你要的是不是這樣做的執行條款(有需要爲每個新的來電者增加的附加的缺點),是利用目標,例如如:

target(Child) && call(public void Parent.foo()). 

有點令人驚訝的是,我發現在eclipse文檔中的切入點指南相當有用。他們是here

+0

我會說這個人也將匹配該呼叫到'bar2()'中的'foo()',與此相反? – ShiDoiSi

+0

是的,那會捕獲'bar2()'中的'foo()',這不是 – kabal

+0

哈哈。這裏有一個建議:如果你想從bar2..barn捕獲foo(),使用我的切點並忽略bar1對foo的調用。每次添加一個新的條形圖時,進入​​並更改該定義並不是非常簡單。 – Rob

3

也許withincode將工作:

call(public void Parent.foo()) && (withincode(* Child.bar1()) || withincode(* Child.bar3())); 

或者,您也可以嘗試cflow切入點:

pointcut bar1(): call(* Child.bar1()); 
pointcut bar3(): call(* Child.bar3()); 

call(public void Parent.foo()) && (cflow(bar1()) || cflow(bar3()); 

在這裏尋找一個pointcut reference

相關問題