Java的动态代理其实用到了代理模式的手段。所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象。
参考链接
0x00 静态代理
静态代理在使用时,需要定义接口或者父类,被代理对象(目标对象)与代理对象(Proxy)一起实现相同的接口或者是继承相同父类。
demo
1 | /** |
总结
总的来说代理模式的优点就是在不修改原目标对象的基础上,可以对目标对象的功能进行扩展,这在《Effective Java》一书中也被推荐用来代理Java的继承。
但是静态代理的缺点在于代理对象需要和目标对象实现一样的接口,所以会产生很多代理类,一旦接口方法增多,需要同时维护目标对象和代理对象。
0x01 动态代理(JDK代理)
特点:
- 代理对象,不需要实现接口
- 代理对象的生成,是利用JDK的API,动态的在内存中创建代理对象(需要我们指定创建代理对象/目标对象实现的接口的类型)
- 动态代理也叫做:JDK代理,接口代理
现在基本所有的框架都会采用动态代理来实现AOP
直接上demo (也可以参考另一篇博客Java 动态代理)
1 | /** |
- 本文作者: Noisy
- 本文链接: http://Metatronxl.github.io/2018/09/17/Java-设计模式-代理模式/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!