2015-12-16 67 views
3

任何人都可以解釋aspectj中this()target()切入點之間的區別。我嘗試在其他地方找到它,但似乎沒有明確的答案。謝謝This()vs Target()aspectj

回答

9

在匹配的連接點上,this()是您所在的對象,target()是您調用/引用的對象。可能會出現混淆,因爲在一個聯合點上匹配execution()切入點的情況下,它們是同一事物 - 包含匹配的執行連接點的對象與運行匹配的方法的對象相同。但在call()連接點的情況下,它們是不同的。他調用的對象與調用該方法的對象不同。

class A { 
    public void m() { 
    B b = new B(); 
    b.n(); 
    } 
} 
class B { 
    public void n() { 
    } 
} 

對於設置,切入點execution(* m(..))將匹配連接點A.m()和具有類型A的this()和A型的target()(和他們將是A的相同的實例)。然而,切入點call(* n(..))將在呼叫站點處在方法A.m()中匹配,其中它呼叫n(),並且在該點this()將是A呼叫的實例,而target()將是該方法被調用的B的實例。

相關問題