【发布时间】:2018-10-07 12:31:40
【问题描述】:
ASM、BCEL、Javaassist 和 AspectJ 等库都能够进行运行时字节码操作,但它们是如何实现的呢?
我之前使用 ASM 完成了一些基本的字节码操作,但我不明白它是如何工作的。 Java Agent 是否在程序的其余部分之前在 JVM 中执行,允许 ASM 在 JVM 执行之前加载编译的类并对其进行编辑?
如果是这样,是否可以在不使用 ASM 等外部库的情况下执行 java 字节码操作,并使用 BufferedReader 加载已编译的类文件并编写自定义解析器等?
【问题讨论】:
-
“外部库”这个词可能有点含糊。无论“外部库”在做什么,理论上您总是可以复制和粘贴他们的代码,然后它们就不再是“外部”了。似乎问题在于如何这些库实际上实现了它们正在做的事情。 (我现在可以再次参考他们的源代码,但是......也许有人可以写一个正确的答案......)
-
我想第三方库会是一个更好的表达方式,尽管我会研究上述一些库的源代码,但是仍然感谢任何 cmets
标签: java bytecode-manipulation