使用no-arg构造函数创建代理类

时间:2011-09-08 07:34:30

标签: java reflection proxy

使用java.lang.reflect.Proxy,我可以创建一个以InvocationHandler作为构造函数参数的类。但是,该类将在框架中的某个位置通过newInstance()进行实例化,InvocationHandler对于所有实例都可以是相同的。

我可以在代理类中添加一个无参数构造函数,它将InvocationHandler传递给原始构造函数吗?

1 个答案:

答案 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()并将其传递给静态工厂方法。

或者你可以更进一步,让一个实现目标接口的类,通过工厂方法构造一个代理字段,并将所有接口方法委托给代理。但这将是代理的代理,我真的不明白这一点。