Android-ASM字节码插桩与APT原理补充

ASM字节码插桩与APT原理补充

技术点

APT补充
1.策略模式
2.SPI机制分析
3.通过javac源码分析APT执行原理
ASM
1.逆波兰表达式
2.java文件转换class文件基本规则
3.ASM框架完成字节码插桩

APT

在java文件编译成class文件的过程中,apt可以监视在这个过程中的注解,因此我们可以利用这个APT生成文件或者修改文件,apt是注解处理工具。
生成的方法就是自己写一个类,这个类去继承AbstractProcessor

策略模式

策略模式是针对一个方法的执行方案进行处理的,对于同一个方法,我们可以有不同的处理方式,在使用的时候new出来的是谁,使用的时候,执行的就是谁。
可以通过 策略模式+注解+反射 实现一种叫做SPI机制的东西。

SPI机制

SPI,全称Service Provider Interface
是一种服务发现机制,它通过ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所在的类。

JavaC源码分析SPI机制

注解处理器的很多东西都是依靠Round这个辅助工具

返回值的作用?
注解是否往下传递,如果是true,就不往下传递了,所以一般是false

逆波兰表达式

表达式中一般由操作数,运算符组成,例如算术表达式中,通常把运算符放在两个操作数的中间,这称为中缀表达式,如A+B。
波兰数学家Jan Lukasiewicz提出了另一种数学表达式,它有两种表示形式:
把运算符写在操作数前面,称之为波兰表达式或者前缀表达式,如+AB,把运算符写在操作数后面,称之为逆波兰表达式,或者后缀表达式,如AB+,其中逆波兰表达式在编译技术中有着普遍应用。

将中缀表达式转换为后缀表达式算法:
1.从左至右扫描中缀表达式
2.若读取的是操作数,则判断该操作数的类型,并将该操作数存入操作数堆栈
3.若读取的是运算符
(1)该运算符为左括号,则直接存入运算符堆栈
(2)该运算符为右括号,则输出运算符堆栈当中的运算符到操作数堆栈中,直到遇到左括号为止
(3)该运算符为非括号运算符
(a)运算符堆栈栈顶的运算符为括号,则直接存入运算符堆栈
(b)若比运算符堆栈栈顶的运算符优先级
(c)若比运算符堆栈栈顶的运算符优先级低,则输出栈顶运算符到操作数堆栈,并将当前运算符压入运算符堆栈
4.当表达式读取完成后运算符堆栈中尚有运算符时,则依序取出运算符到操作数堆栈,直到运算符堆栈为空。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天津 唐秙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值