是否可以在运行时使用Java代理重新定义Bootstrap类?
更具体地说,我想在java.io
程序包运行时中重新定义某些类。
答案 0 :(得分:0)
是的,可以使用能够重新定义类的Javaagent,因为一旦激活您的代理,java.io
中的许多类将已经加载。为此,您必须使用一个premain
方法创建一个jar文件,该方法声明Can-Redefine-Classes
或Can-Retransform-Classes
属性。
这样做,您可以注册具有重新转换功能的ClassFileTransformer
并重新转换您需要更改的类。请注意,这不允许您通过添加字段或方法来更改类文件的布局。
您可以使用诸如ByteBuddy之类的库,该库提供了重新转换类using its AgentBuilder
to simplify the process的标准方法。请注意,您必须定义一个忽略匹配器,该匹配器不排除所有引导程序类,默认的匹配器是完成此操作的。