字节码字节码增强字节码增强技术
字节码
字节码含义:待补充。
Java为了能让Java程序编译一次到处运行,用Java 编译器将程序对源代码编译生成固定格式的字节码(.class文件)供JVM使用。
因此理论上来说,只要符合JVM规范的字节码文件,就可以在JVM上运行,不同的JVM类语言(如Scala、Groovy、Kotlin)编译成字节码都可在JVM运行,除此之外,如果你对JVM的字节码规范非常了解的话,通过自己按照JVM规范自己写也是可以的。
字节码增强简单理解就是通过某种手段或者技术修改编译好的字节码,让新生成的字节码能满足我们的定制需求。
这里说的需求就有很多了,比如常用的AOP底层很多就是使用字节码增强来达到切面拦截,再比如微服务中的链路追踪就使用了字节码增强(仅仅只一些Java客户端)来进行埋点标记来记录调用链关系的,所以了解字节码增强对一些框架能有更深入对理解,对问题排查有很大对帮助。
字节码增强技术上面说的通过某种手段或者技术到底指哪些呢?我们最常用的Java Proxy也是一种增强技术,另外常用的还有 ASM,AspectJ,Javassist等常用的技术。
ASM在指令层次操作字节码的,需要对JVM的指令有一定的了解,同时众多的指令也很难记住,操作比较高;AspectJ扩展了Java,定义了一些专门的AOP语法,其中Spring AOP就使用了AspectJ;Javassist是强调源代码层次操作字节码的框架,操作起来很容易入手。
参考文章:字节码增强技术-Javassist