使用ByteBuddy,我想为具有私有构造函数的类创建代理。这是班级:
public class Foo {
private Foo() {
}
}
我尝试过写一些像这样的代码但不起作用吗?
public class CreateAndExecuteProxy {
public static void main(String[] args) throws Exception {
Constructor<?> superConstructor = Foo.class.getDeclaredConstructor();
Class<? extends Foo> proxyType = new ByteBuddy()
.subclass( Foo.class, ConstructorStrategy.Default.NO_CONSTRUCTORS )
.defineConstructor( Visibility.PUBLIC )
.intercept( MethodCall.invoke( superConstructor ).onSuper() )
.make()
.load( CreateAndExecuteProxy.class.getClassLoader(), ClassLoadingStrategy.Default.INJECTION)
.getLoaded();
Foo foo = proxyType.newInstance();
}
}
答案 0 :(得分:0)
对于不允许调用私有构造函数的Java字节代码,您无法做任何事情。您有两种选择:
ByteBuddy::redefine
添加另一个构造函数,并使用代理或过早加载强制此类进入类加载器。