java - 如何使用字节码操作向现有类添加新方法?
问题描述
我需要在编译的 java 类中添加新的(实际上是覆盖现有的继承的)方法。我可以使用 Instrumentation ( #retransformClasses()
) 和 Javassist ( #insertAfter()
) 修改超类中的方法。不幸的是,这将改变该超类的所有子类的行为,但我只想改变一个特定的类。
我可以看到 Javaassist 具有#addMethod()
功能(并且它确实有效)但是如何将生成的字节码注入 JVM?
Java.Instrumentation#retransformClasses()
和#redefineClasses()
方法都在 javadocs 中清楚地说明:
...重新定义不得添加、删除或重命名字段或方法...
解决方案
推荐阅读
- html - 第三个 div 是从哪里来的?
- c# - Physics.BoxCast 来自 2D 相机屏幕空间
- php - Symfony 5 中的 Doctrine Gedmo-Extension (Timestampable, Softdeletable ...) 有替代品吗?
- node.js - mongodb在ejs文件中显示搜索到的文档数据
- flutter - 如何在 Dart/Flutter 中将数字从 20,95 转换为 20.95?
- apache-kafka - 错过了向外界开放卡夫卡的一步
- python - 是否有 Python 包可以从 4D numpy 数组创建 3D 动画?
- python - 带有 if else 条件 pandas 的数据透视表
- go - 在服务器重新启动 mqtt 服务不工作
- c - 从C中的另一个数组初始化一个数组