重新定义JDK Bootstrap类

问题描述 投票:0回答:1

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

bytecode javaagents byte-buddy
1个回答
0
投票

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

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

您可以使用像ByteBuddy这样的库,它提供了重新转换类using its AgentBuilder to simplify the process的标准方法。请注意,您必须定义一个不会排除所有引导程序类的忽略匹配器,这是实现此目的的默认值。

© www.soinside.com 2019 - 2024. All rights reserved.