我基于java.io.File
创建了一个自定义文件,如下所示:
class CloudFile extends java.io.File {}
使用ByteBuddy是否有可能(在运行时)用新的java.io.File
替换对类CloudFile
的所有调用并伪装它
因此,例如,我创建了一个使用库的应用程序,该库大量使用java.io.File
,我想要的是,该库对应用程序中的File
类的任何调用都将是对{{ 1}}
或者,否则,使用ByteBuddy创建一个将覆盖CloudFile
的Classloader的更合理的解决方案-问题是正确的做法是什么?
答案 0 :(得分:1)
您可以使用Byte Buddy允许使用AgentBuilder
构建的Java代理来重新定义类。然后,您可以指示它重新定义所有库代码,其中用File
替换对CloudFile
的构造函数调用,我假设该函数对相关方法有虚拟覆盖。
要替换构造函数,请创建一个转换器,该转换器会注册一个MemberSubstitution
,其中构造函数被关闭。