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

posted @ 2021-12-19 15:49  飞飞很要强  阅读(1173)  评论(0编辑  收藏  举报