楼主这个问题问的好
实际上 你要是看了Proxy的源码之后,newProxyInstance方法是首先调用getProxyClass方法获取动态代理类的字节码对象,有了字节码对象Class之后,楼主,是不是就可以使用Class对象的Constructor相关的方法来创建这个Class对象对应类的实例了?
因此 newProxyInstance方法中也就是这么做的
我整理了一下 你看看有帮助没
源码如下:- public class Proxy implements java.io.Serializable {
- //...
- //对Proxy的动态代理类,由于只有一个构造方法,并且方法的参数只有一个
- //InvocationHandler类型的,所以这里面就直接把这个形参固定住,不在要求用
- //户关联形参
- private final static Class[] constructorParams = {InvocationHandler.class};
- //...
- public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException {
- if (h == null) {
- throw new NullPointerException();
- }
- Class cl = getProxyClass(loader, interfaces);
- try {
- Constructor cons = cl.getConstructor(constructorParams);
- return (Object) cons.newInstance(new Object[] { h });
- } catch (NoSuchMethodException e) {
- throw new InternalError(e.toString());
- } catch (IllegalAccessException e) {
- throw new InternalError(e.toString());
- } catch (InstantiationException e) {
- throw new InternalError(e.toString());
- } catch (InvocationTargetException e) {
- throw new InternalError(e.toString());
- }
- }
- //...
- }
复制代码 |