Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ByteBuddy重写运行时类_Java_Byte Buddy - Fatal编程技术网

Java 使用ByteBuddy重写运行时类

Java 使用ByteBuddy重写运行时类,java,byte-buddy,Java,Byte Buddy,我基于java.io.File创建了一个自定义文件,如下所示: classcloudfile扩展java.io.File{} 使用ByteBuddy是否可以(在运行时)替换对类java.io.File的所有调用,并用新的CloudFile 因此,例如,我创建了一个应用程序,它使用一个广泛使用java.io.File的库。我想要的是,在我的应用程序中,对File类调用该库就是调用CloudFile 或者,一个更合理的解决方案是,使用ByteBuddy创建一个类加载器,该加载器将覆盖java.io.

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

classcloudfile扩展java.io.File{}

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

因此,例如,我创建了一个应用程序,它使用一个广泛使用
java.io.File
的库。我想要的是,在我的应用程序中,对
File
类调用该库就是调用
CloudFile


或者,一个更合理的解决方案是,使用ByteBuddy创建一个类加载器,该加载器将覆盖
java.io.File
——问题是正确的做法是什么?

您可以使用java代理重新定义类,该代理允许使用
AgentBuilder
构建类。然后,您可以指示它重新定义所有库代码,将对
File
的构造函数调用替换为
CloudFile
,我假设它对所讨论的方法具有虚拟覆盖


为了替换构造函数,创建一个注册
MemberSubstitution
的转换器,其中构造函数被关闭。

这意味着,对于这个示例类,我基本上可以使用ByteBuddy在这里使文件调用替换为我想要的类?是,Byte Buddy将接受构造函数调用,并将其替换为对CloudFile的调用,前提是存在兼容的构造函数。