aspect的asm

cglib
首先cglib是一个工具库,一般用来对对象进行代理以实现一些功能的增强,例如 before,after,exception,return 等等,cglib可以理解成是一个框架,底层用到了aop概念,aspect 代码织入等等。

aspect
aspect底层使用了asm技术,asm技术是对java bytecode 进行操作的一个框架技术,jvm对class的加载是建立在字节码的基础上,字节码的生成有2种,一种是我们手码,另一种就可以通过asm来动态的创建和修改生成新的字节码。
java class被定义在.class文件中,里面有类对象所有的元数据信息,例如类名,修饰符,变量名,方法等等定义。asm可以对字节码进行解析,然后生成新的字节码。aspect通过自己的agent加载器当然也可以在加载目标类时,直接通过asm来动态的修改class后将新的字节码进行加载。

2.ASM 跟传说中的AOP三剑客APT、aspectJ、Javassit有什么关系?(https://www.jianshu.com/p/a1e6b3abd789)
分别解释下这几个名词

APT:APT(Annotation Processing Tool)即注解处理器,是一种处理注解的工具,确切的说它是javac的一个工具,它用来在编译时扫描和处理注解。注解处理器以Java代码(或者编译过的字节码)作为输入,生成.java文件作为输出。简单来说就是在编译期,通过注解生成.java文件

aspectJ:AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法,所以它有一个专门的[编译器]用来生成遵守Java字节编码规范的Class文件。适合在某一个方法前后插入部分代码,处理某些逻辑:比如方法运行时间、插入动态权限检查等。问题会造成很多的冗余代码,产生很多代理类。简单来说就是在生成class时动态织入代码

Javassit: Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba(千叶滋)所创建的。简单来说就是源码级别的api去修改字节码

byte code解释:https://www.jianshu.com/p/92a75a18cbc1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值