JDK的动态代理,代理的是一个对象还是一组接口? 如果是一个特定的对象,那它怎么知道是那个对象? 因为Proxy.newProxyInstance(classLoader, interfaces, 代理类); 
没有指定代理的目标对象啊~~ 

解决方案 »

  1.   

    那么也就是有着同样接口的Object,都会代理喽。
    可实际上只是代理一个对象哦。我就是不了解JDK怎么知道是在代理那个对象
      

  2.   

    你调用的时候Proxy.newProxyInstance(classLoader, interfaces, 代理类);对这个方法是要传一个接口的实现的类,就是对这个类进行代理,只有这个类实现了接口,才能对它进行代理,还有cglib也是进行代理的,
      

  3.   

    代理类是实现InvocationHandler接口
    具体如下
    private static class TestBeanHander implements InvocationHandler {
    private Object obj; public TestBeanHander(Object obj) {
    this.obj = obj;
    } @Override
    public Object invoke(Object proxy, Method method, Object[] args)
    throws Throwable {
    System.out.println(proxy.getClass().getName());
    System.out.println("JDK-START");
    Object re = method.invoke(obj, args);
    System.out.println("JDK-END");
    return re;
    }
    }
    代理示例:
    ITestBean tb = new TestBean();
    tb = (ITestBean) Proxy.newProxyInstance(tb.getClass().getClassLoader(),
    tb.getClass().getInterfaces(), new TestBeanHander(tb));
    有关JDK动态代理的原理,可以看看我的博客
    《JDK动态代理为什么必须用接口以及与CGLIB的对比》
    http://blog.csdn.net/MagicianLiu/archive/2009/04/24/4107497.aspx
    tb.add();