天天看點

AspectJ與ASM與Javaassist

AspectJ的缺點是,由于其基于規則,是以其切入點相對固定,對于位元組碼檔案的操作自由度以及開發的掌控度就大打折扣。還有就是我們要實作的是對所有方法進行插樁,是以代碼注入後的性能也是我們需要關注的一個重要的點,我們希望隻插入我們想插入的代碼,而AspectJ會額外生成一些包裝代碼,對性能以及包大小有一定影響。

Javassist & ASM 對比

Javassist源代碼級API比ASM中實際的位元組碼操作更容易使用

Javassist在複雜的位元組碼級操作上提供了更進階别的抽象層。Javassist源代碼級API隻需要很少的位元組碼知識,甚至不需要任何實際位元組碼知識,是以實作起來更容易、更快。

Javassist使用反射機制,這使得它比運作時使用Classworking技術的ASM慢。

總的來說ASM比Javassist快得多,并且提供了更好的性能。Javassist使用Java源代碼的簡化版本,然後将其編譯成位元組碼。這使得Javassist非常容易使用,但是它也将位元組碼的使用限制在Javassist源代碼的限制之内。

總之,如果有人需要更簡單的方法來動态操作或建立Java類,那麼應該使用Javassist API 。如果需要注重性能地方,應該使用ASM庫。

本文參與 騰訊雲自媒體分享計劃 ,歡迎熱愛寫作的你一起參與!

本文分享自作者個人站點/部落格

https://blog.csdn.net/u012124438?type=blog

複制

如有侵權,請聯系 [email protected] 删除。