Jdk的动态代理类Proxy可以实现对一组接口中(a list of interfaces)所有的方法进行代理增强.它的原理是当我们需要对一组接口中所有的方式进行代理时候,新建一个Proxy类,将一个classloader,所需代理的接口数组,作为它的构造方法的两个参数.
在构造方法中一个名为generateProxyClass()的方法将生成一个新的.class文件的内存副本,所需代理的方法的字节码将会被写入一个最终代表这新的class的字节数组中,最后这个在runtime中被制作出的新的类将以一个Class类的的形式返还.所有的方法的实现都是一致的,那就是调用一个叫InovcationHandler类中的invoke()的函数.通过在InvocationHandler类中添加一个被代理的对象作为其成员变量.并将要调用的方法名作为invoke()的参数传入,便可以实现对被代理对象的的某个特定方法的访问.
注:此过程最难理解的就是代理类的创建过程,通过新建一个byte[]数组,然后将二进制的字节码写入其中,并将其以Class类型返还.人为的制作一个程序中本没有的类.堪称大神级别的操作...