使用ByteBuddy

时间:2020-03-04 07:00:57

标签: java byte-buddy

我基于java.io.File创建了一个自定义文件,如下所示:

class CloudFile extends java.io.File {}

使用ByteBuddy是否有可能(在运行时)用新的java.io.File替换对类CloudFile的所有调用并伪装

因此,例如,我创建了一个使用库的应用程序,该库大量使用java.io.File,我想要的是,该库对应用程序中的File类的任何调用都将是对{{ 1}}

或者,否则,使用ByteBuddy创建一个将覆盖CloudFile的Classloader的更合理的解决方案-问题是正确的做法是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用Byte Buddy允许使用AgentBuilder构建的Java代理来重新定义类。然后,您可以指示它重新定义所有库代码,其中用File替换对CloudFile的构造函数调用,我假设该函数对相关方法有虚拟覆盖。

要替换构造函数,请创建一个转换器,该转换器会注册一个MemberSubstitution,其中构造函数被关闭。

相关问题