使用java.lang.reflect.Proxy
,我可以创建一个以InvocationHandler
作为构造函数参数的类。但是,该类将在框架中的某个位置通过newInstance()
进行实例化,InvocationHandler
对于所有实例都可以是相同的。
我可以在代理类中添加一个无参数构造函数,它将InvocationHandler
传递给原始构造函数吗?
答案 0 :(得分:3)
我担心它不会起作用,因为实际的代理魔术发生在这个本机代码中
private static native Class defineClass0(ClassLoader loader, String name,
byte[] b, int off, int len);
只能通过静态方法Proxy.newProxyInstance(ClassLoader, Class<?>[], InvocationHandler)
访问。该方法依次使用提供的InvocationHandler
作为参数调用由此生成的类的构造函数。
因此,您无法从newInstance()
电话返回代理服务器。您最接近的是使用InvocationHandler
实例化newInstance()
并将其传递给静态工厂方法。
或者你可以更进一步,让一个实现目标接口的类,通过工厂方法构造一个代理字段,并将所有接口方法委托给代理。但这将是代理的代理,我真的不明白这一点。