Spring的最深处——ASM入门
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