2011-10-04 33 views
0


任何人都可以向我解釋AspectJ中運行時的「上下文綁定」是什麼,以及它與反射有什麼不同?

特別是,如果我需要從由給定方面編織類的註釋,上下文結合:什麼是AspectJ上下文綁定?

after(MyAnnotation annotation) : execution(* Foo.*(..)) && @this(annotation)

或反射:

MyAnnotation myAnnotation = thisJoinPoint.getThis().getClass().getAnnotation(MyAnnotation.class);

可以使用,但什麼是最好的解決方案(即最快的解決方案)?

回答

1

你最好使用前者。創建對象是昂貴的,因爲所有字段在訪問時都必須填寫。因此,如果需要,AspectJ將只創建一個。

通過建議訪問註釋通常會更快,因爲編譯器有更多的優化機會。此外,它更強類型(你的第二個例子有一個類型錯誤)。

+0

謝謝,我糾正了錯誤。但是,請你給我更多的關於什麼是上下文綁定以及它是如何工作的見解?我找不到任何有用的信息。 – futtetennista

+0

上下文綁定只是切入點內部發生的綁定的一個奇特術語。這發生在'@ this','''target','args'等內部。它與常規反射不同,因爲編譯器在編譯時確切知道要綁定什麼。但是,通過反射,編譯器會在運行時發生反射,因此優化時間會更加困難。如果你想了解更多關於實現的細節,那麼我建議在aspectj-users郵件列表上詢問:http://eclipse.org/aspectj/userlists.php –

+0

非常感謝你的解釋! – futtetennista