2013-02-25 19 views
2

父類:如何橫切父類的方法?

public class Animal { 
    public String name() { 
    return "my name"; 
    } 
} 

子類:

public class Dog extends Animal { 
    // no methods 
} 

我試圖用橫切到AspectJ的一個Dog.name()電話,但不工作:

@Aspect 
public class Crosscut { 
    @Around("execution(* Dog.name())") 
    public Object exec(ProceedingJoinPoint point) { 
    // this point is never reached 
    } 
} 

然而,如果我添加子方法的Dog類,橫切作品:

public class Dog extends Animal { 
    public String name() { 
    return super.name(); 
    } 
} 

如何編寫正確的橫切?或者根本不可能?

回答

1

由於AspectJ的並不在這裏創造了一種新方法,將不能夠匹配Dog.name()。 您需要做的是在Animal.name()上聲明建議並使用this(...)使aspectj添加運行時instanceof檢查。

嘗試 @Around("execution(* Animal.name()) && this(Dog)")

1

其實jontro的想法是好的,但解決的辦法是在情況下,簡單的你是不是緊盯Dog,但要攔截上Animal所有name()方法和它的子類:

@Around("execution(* Animal+.name())") 
+0

謝謝,我可以使用'* +。name()'與方法'name()'匹配所有的類嗎? – yegor256 2013-02-25 16:30:47

+0

在這種情況下,您不需要加號。 ;-) – kriegaex 2013-02-25 17:59:48