diff --git a/notes/README.md b/notes/README.md index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c5fa3809ed7229fbcf94d7d4854a085489e9961b 100644 --- a/notes/README.md +++ b/notes/README.md @@ -0,0 +1,21 @@ +想深入学习一个字节码框架,听说了javassit、asm、ByteBuddy、cglib啥的,小傅哥帮忙大概介绍下,想入手ByteBuddy咋样。 + +框架介绍: + +1. ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。 + +2. Javassist 是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态"AOP"框架。 + +3. Byte Buddy 是一个代码生成和操作库,用于在 Java 应用程序运行时创建和修改 Java 类,而无需编译器的帮助。除了 Java 类库附带的代码生成实用程序外,Byte Buddy 还允许创建任意类,并且不限于实现用于创建运行时代理的接口。此外,Byte Buddy 提供了一种方便的 API,可以使用 Java 代理或在构建过程中手动更改类。2015年10月,Byte Buddy被 Oracle 授予了 Duke’s Choice大奖。该奖项对Byte Buddy的“ Java技术方面的巨大创新 ”表示赞赏。我们为获得此奖项感到非常荣幸,并感谢所有帮助Byte Buddy取得成功的用户以及其他所有人。我们真的很感激! + +使用总结: + +1. ASM 纯字节码操作,可以结合 IDEA 插件:ASM Bytecode Outline,进行使用。它能把你的普通 Java 代码转换为使用 ASM 操作时,应该做如何的处理。但 ASM 是使用上最复杂也是功能最强的框架,很多其他框架Cglib、Javassist、Byte-buddy 都是基于 ASM 开发的。 + +2. Javaassit 市面上很多基于 javaagent 实现的非入侵的全链路监控都是使用的此框架完成,因为它的性能稳定,操作简单,功能丰富,既可以使用提供的 API 也可以操作字节码,所以使用起来会更加方便,遇到问题也可以很快的找到解决方案。 + +3. Byte Buddy 我是非常喜欢这个框架,因为他可以让对字节码的操作简化为像写普通的程序代码一样,非常容易完成一些需求逻辑的实现,并且它还是一个获奖项目! + +最后说明: + +其实你可以把几款字节码插桩组件都了解下,完成同一个复杂场景的功能,看看各自的实现是否能满足你的需要,之后选取那个最合适你的。