重新定义JDK Bootstrap类

时间:2018-09-04 22:09:33

标签: bytecode javaagents byte-buddy

是否可以在运行时使用Java代理重新定义Bootstrap类? 更具体地说,我想在java.io程序包运行时中重新定义某些类。

1 个答案:

答案 0 :(得分:0)

是的,可以使用能够重新定义类的Javaagent,因为一旦激活您的代理,java.io中的许多类将已经加载。为此,您必须使用一个premain方法创建一个jar文件,该方法声明Can-Redefine-ClassesCan-Retransform-Classes属性。

这样做,您可以注册具有重新转换功能的ClassFileTransformer并重新转换您需要更改的类。请注意,这不允许您通过添加字段或方法来更改类文件的布局。

您可以使用诸如ByteBuddy之类的库,该库提供了重新转换类using its AgentBuilder to simplify the process的标准方法。请注意,您必须定义一个忽略匹配器,该匹配器不排除所有引导程序类,默认的匹配器是完成此操作的。