Spring的最深處——ASM入門


Spring的最深處——ASM入門

Spring 就兩個核心

一是AOP

二是IOC

具體來說,Spring的AOP,可以通過JDK的動態代理來實現,也可以通過CGLIB實現。其中,CGLib (Code Generation Library)是在ASM的基礎上構建起來的(當然JDK Proxy也是一樣的),所以,Spring AOP是間接的使用了ASM。(參考自Spring Framework Reference Documentation8.6 Proxying mechanisms)。

ASM官網——

相關學習資料都可以在官網的User guide中文檔找到。但是因為是全英文的,學習起來可能會有些難度
image

ASM入門

ASM不是什么的縮寫,那名稱是怎么來的呢?一般而言在c語言中通常會有一個asm類,約定俗成的在里面寫一些匯編語言Assembly Language。

2002年的時候,Eric Bruneton、Romain Lenglet和Thierry Coupaye發表了一篇文章,名為《ASM: a code manipulation tool to implement adaptable systems》。在這篇文章當中,他們提出了ASM的設計思路。

一般來說,大寫字母的組合,可能是多個單詞的縮寫形式,例如,JVM表示“Java Virtual Machine”。但是,ASM並不是多個單詞的首字母縮寫形式。在上面的文章中,記錄了下面的話:

The ASM name does not mean anything: it is just a reference to the __asm__ keyword in C, which allows some functions to be implemented in assembly language.

ASM是如何處理字節碼(ByteCode)數據的呢?

回答:ASM處理字節碼(ByteCode)的方式是“拆分-修改-合並”。

ASM處理字節碼(ByteCode)數據的思路是這樣的:

第一步,將文件拆分成多個部分;

第二步,對某一個部分的信息進行修改;

第三步,將多個部分重新組織成一個新的.class文件。

先挖個坑,寒假里仔細了解

核心組件:
ClassReader
Visiter
各種回調函數

參考文章:

https://blog.51cto.com/lsieun/2924583

https://blog.csdn.net/GGB__/article/details/120308772?spm=1001.2014.3001.5501

https://blog.csdn.net/zhuoxiuwu/article/details/78619645


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM