java动态代理
我们已经有一个类 dog 它实现了animal接口
我们想生成一条代理dog proxydog
他和dog拥有相同的接口,当我需要用dog的时候可以使用proxyog代替,
这里我们要穿进去三个参数
1.classload 用来加载生成的代理狗
2.interface数组,用来告诉要实现哪些接口
3.一个实现了InvocationHandler的类
animal proxydog=(animal)Proxy.newProxyInstance();
现在我们拥有了proxydog 我们看看他是怎么创建出来的
1.首先,创建一个类 实现继承Proxy,实现第二个参数的所有接口,这样就是一个animal了
2.用第一个参数将类加载进来
3.对animal执行的任何方法都被转到实现了InvocationHandler接口的第三个参数invoke方法。
4.由于多态性,就进入了我们的第三个参数的invoke方法内,他有三个参数
1.proxydog 创建的代理对象
2.method 要调用的方法
3.agrs 参数列表,可以为空
5.比如说我们要使用dog的say方法,但是我们传进去的是proxydog,这样我们调用dog方法时,会将参数传递给InvocationHandler的invoke方法
...........