很難爲此製作一個簡潔的標題。如何避免切入超類時切入兩次切入點,但是派生類重寫?
反正想象我有一個父類:
public class Shape {
public Dimensions getDimensions() {
// Does some generic stuff.
}
}
我已經從它來覆蓋getDimensions方法派生類:當我創建一個方面與Shape.getDimensions
切入點
public class Circle extends Shape {
public Dimensions getDimensions() {
// Does some stuff.
super.getDimensions();
}
}
,當Circle.getDimensions
被調用時,切入點被擊中兩次:一次爲Circle.getDimensions
,然後一次當它調用super.getDimensions
時。
切入點看起來是這樣的:@Pointcut("execution(* Shape.getDimensions(..))")
我添加的意見裏面一個黑客來檢查聲明類型的名稱(用JoinPoint.getSignature().getDeclaringType().getName()
),但我覺得很毛,感覺有點像黑客。我想那裏必須是一個更好的方法來做到這一點。
有嗎?
道歉,如果格式不是很好。第一次在這裏問一個問題(我通常可以找到答案)。
精美的作品,謝謝。我更習慣於註釋風格,但關鍵是cflowbelow調用。在試圖弄清楚我是否可以將它凝結成一個單一的建議(無法弄清楚)的過程中,我找到了這個可愛的附錄:http://www.eclipse.org/aspectj/doc/next/progguide/ semantics-pointcuts.html – Depressio
所以,先謝謝你接受和提高我的答案。 ;-)請做。 – kriegaex
我顯然需要15分才能這樣做。我只有11個。相信我,我試過了! :( – Depressio