【发布时间】:2015-07-05 15:20:35
【问题描述】:
目前我正在尝试修改驻留在 JVM 已加载的类中的方法体。我知道 JVM 实际上不允许更改已经加载的类的定义。但是我的研究让我想到了 JRebel 或 Java Instrumentation API 之类的实现,它们都使用了基于代理的方法。我知道如何在代表 Javassist 加载类之前执行此操作。但考虑到例如在应用程序启动时加载类定义的 EJB 环境中的 JRebel,不应该在 JVM 加载的类上修改字节码吗?
【问题讨论】:
-
您希望类的加载后修改如何与 JVM 的编译交互?
-
你可以阅读这个:java.dzone.com/articles/reloading-java-classes-401 这很有趣。
-
根据您的需要,AspectJ(允许您向现有对象添加代码)或 OSGi(基本上是类加载器)可能值得一看。
标签: java bytecode javaagents jrebel