初次听到这么名字,觉得高大上。熟悉又陌生,熟悉就熟悉在很多框架都用到了代理模。陌生陌生在自己在coding 的过程中没有写过代理模式。
# # 一起学学习一下代理模式
这篇文章挺好的,让我明白了静态代理,动态代理,了解了动态代理的真正的过程。
## 学习笔记
代理模式根据字节码的创建的时机可以分为动态代理,和静态代理。
- 所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和真实主题角色的关系在运行前就确定了。
- 而动态代理的源码是在程序运行期间由JVM根据反射等机制动态的生成,所以在运行前并不存在代理类的字节码文件。之所以在运行期间才生成,是因为要给谁提供代理,我们还不明确。动态代理很大成都上是要依赖反射原理的。
# #静态代理的面孔
那么代理究竟长什么样子呢?
我简单的描述一下,有一个接口 A,他提供一个未实现的方法 select() ,我们的实现类A是要实现接口A的。所谓的静态代理,就是让一个代理类proxy,让它也实现接口A,这样它就要实现接口中的 select方法。在实现这个方法的过程中,它是调用的 实现类A 的select方法,也就是在自己的实现类中,调用了实现类A 的select方法,自己也可以在做一些补充。
# # 静态代理的缺点
我们要为想要代理的对象一一的写代理类。这样就会造成代码的臃肿。
# # 动态代理
所谓的动态代理,就是先不写给谁提供代理,至于给谁提供代理就是需要传进来。
看下边的截图,对比静态代理和动态代理低差别
静态代理的截图:
再看动态代理的截图:
动态代理的调用过程:
关键的地方就是构造方法,可以看到最大的区别是:静态代理是指定的 接口类名称,而动态代理用的是 Object,这就是唯一的区别。基于 java 语言本身的特性,所有类的祖先都是 Object。