2013-08-29 17 views
0

這兩個切入點有什麼區別?我應該什麼時候使用其中一種結構?AspectJ:目標vs簽名模式來選擇某個類的方法

pointcut first_pointcut(): target(MyClass) && call(void myMethod(..)) 
pointcut second_pointcut(): call(void MyClass.myMethod(..)) 

當閱讀AspectJ Programming Guide時,我開始感到困惑。該指南中的一些例子將使用簽名模式類似這樣的限制切入點應用到特定的類:

call(public * Figure.* (..)) 

其中「挑選出每次調用圖的公共方法。」其它實例使用目標限制切入點適用於某些類別,例如:

pointcut setter(): target(Point) && 
       (call(void setX(int)) || 
       call(void setY(int))); 

其中「挑選出每次調用叫上點的實例時setX的(INT)或SETY(INT)。」

回答

1

目標期望指定的類的實例,而調用本身沒有這樣的限制。這意味着只需調用(..)的切入點也可以捕獲靜態方法執行,而具有目標(Class)的切入點則不能。它只捕獲在指定類的對象上執行的方法(因此名稱爲「目標」)。