# DynamicProxyDemo **Repository Path**: jierry/DynamicProxyDemo ## Basic Information - **Project Name**: DynamicProxyDemo - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2016-07-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #静态代理 ###SuperMan1类和SuperMan2类都是Person类的代理类,对Person类中的方法进行加强,只不过这种代理是静态代理,很受限制。因为SuperMan1和SuperMan2只能代理Run类型的类,其它类型没法代理。为了解决这个问题,Java中引入动态代理。 #动态代理 ###动态代理的意思就是一个类的(比如Person)的代理类(比如SuperMan2)是动态生成的,也就是说这个代理类不是提前写好的,是在程序运行时动态的生成的。而且能够代理实现了某个接口的任何类型的类。我们暂且把动态代理这个过程当作一个黑箱子,然后看它的输入和输出。对于输入,就是要被代理的类和它实现的接口,对于输出就是代理类 ![](http://dl2.iteye.com/upload/attachment/0094/8045/984b5d42-0518-3fbe-87aa-4e41211637d0.png) 黑箱子:就是Java中的Proxy类; Handler:就是Java中的InvocationHandler的子类。 利用Proxy类中的newProxyInstance静态方法,就可以动态生成一个代理类。这个方法有三个参数: 第一个是要一个类加载器,它的作用是将动态生成的代理类的字节码文件加载到JVM虚拟机中,一般我们可以用被代理类的加载器; 第二个是被代理类实现的接口的Class类; 第三个是InvocationHandler的子类,在这个类中的invoke方法中,对某个方法的前后加入加强的逻辑。