Spring的最深處——ASM入門
Spring 就兩個核心
一是AOP
二是IOC
具體來說,Spring的AOP,可以通過JDK的動態代理來實現,也可以通過CGLIB實現。其中,CGLib (Code Generation Library)是在ASM的基礎上構建起來的(當然JDK Proxy也是一樣的),所以,Spring AOP是間接的使用了ASM。(參考自Spring Framework Reference Documentation的8.6 Proxying mechanisms)。
ASM官網——
相關學習資料都可以在官網的User guide中文檔找到。但是因為是全英文的,學習起來可能會有些難度
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