2016-04-14 59 views
0

對於Java中的工具,爲什麼java.lang.instrument比AspectJ更受歡迎,儘管它們都可以平等地執行工具的工作。使用java.lang.instrument有什麼特別的優勢嗎?在此先感謝...java.lang.instrument vs AspectJ

+0

AspectJ不是內置的? – chrylis

+0

它是用於eclipse的插件庫 – FAZ

回答

3

這是兩個完全不同的東西。 Instrumentation API爲JVM運行時提供了一個鉤子,允許Java代理訪問JVM的更多高級功能。它還爲JVM的類加載提供了一個鉤子,在加載類時可以通知代理並重新定義其類文件。同樣,可以重新定義/重新轉換已經加載的類。

AspectJ是一個庫,它提供了一個更高層次的重新定義現有類的視圖。它適用於點削減和連接點來解釋如何重新定義一個類。然後,通過AspectJ等工具的幫助,在AspectJ中重新定義,或者AspectJ可以使用Java agebt和instrumentation API在運行時應用類的重新定義。

1

由於AspectJAOP實現與字節碼操作,最好比較AOP framewors。例如。 AspectJ vs Spring AOPjava.lang.instrument不是AOP框架。

+0

由於Spring AOP建立在AspectJ上,因此不是最好的比較。 –

+0

@RafaelWinterhalter這並非絕對正確。 Spring有一些AspectJ支持,但主要方法是[基於代理的](http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-introduction-proxies) 。 –

+0

我的意思是說,Spring提供的高級代碼生成基於底層解決方案,比如使用Instrumentation API的AspectJ。可以這麼說,春季金字塔的高一級。 –