代理模式静态和动态代理(设计模式之动态代理)
代理模式静态和动态代理(设计模式之动态代理)$Proxy0继承了Proxy实现了我们定义的接口,$Proxy0 构造调用了Proxy的构造,传入InvocationHandler,代理类中同时也实现了我们定义的接口的方法,这些方法内部调用的就是我们重写的invoke方法源码中我们看到获取代理类返回的是$Proxy0,进而对代理类实例化,我们再看一下$Proxy0的源码代理类实现InvocationHandler,重写invoke方法客户端调用动态代理对目标对象方法的调用通过invoke方法执行,但是我们在代码中并没有看到对invoke显示的调用,那么invoke方法到底有什么用?又是什么时候执行的呢?跟一下Proxy.newProxyInstance的源码
JDK动态代理实现与目标对象解耦,普通的静态代理每一种目标对象都要单独写一个代理类,显然扩展性是非常差的
JDK动态代理是面向接口编程的,目标对象必须实现一个接口,通过接口动态生成代理类,然后通过构造函数的方式将目标对象传给代理类,由代理类调用目标对象的方法
定义接口
定义具体实现
代理类实现InvocationHandler,重写invoke方法
客户端调用
动态代理对目标对象方法的调用通过invoke方法执行,但是我们在代码中并没有看到对invoke显示的调用,那么invoke方法到底有什么用?又是什么时候执行的呢?跟一下Proxy.newProxyInstance的源码
源码中我们看到获取代理类返回的是$Proxy0,进而对代理类实例化,我们再看一下$Proxy0的源码
$Proxy0继承了Proxy实现了我们定义的接口,$Proxy0 构造调用了Proxy的构造,传入InvocationHandler,代理类中同时也实现了我们定义的接口的方法,这些方法内部调用的就是我们重写的invoke方法