初次听到这么名字,觉得高大上。熟悉又陌生,熟悉就熟悉在很多框架都用到了代理模。陌生陌生在自己在coding 的过程中没有写过代理模式。

 

# # 一起学学习一下代理模式

  这篇文章挺好的,让我明白了静态代理,动态代理,了解了动态代理的真正的过程。

 

## 学习笔记

  代理模式根据字节码的创建的时机可以分为动态代理,和静态代理。

  • 所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和真实主题角色的关系在运行前就确定了。
  • 而动态代理的源码是在程序运行期间由JVM根据反射等机制动态的生成,所以在运行前并不存在代理类的字节码文件。之所以在运行期间才生成,是因为要给谁提供代理,我们还不明确。动态代理很大成都上是要依赖反射原理的。

 

#  #静态代理的面孔

  那么代理究竟长什么样子呢?

  我简单的描述一下,有一个接口 A,他提供一个未实现的方法 select()  ,我们的实现类A是要实现接口A的。所谓的静态代理,就是让一个代理类proxy,让它也实现接口A,这样它就要实现接口中的 select方法。在实现这个方法的过程中,它是调用的 实现类A 的select方法,也就是在自己的实现类中,调用了实现类A 的select方法,自己也可以在做一些补充。

 # # 静态代理的缺点

  我们要为想要代理的对象一一的写代理类。这样就会造成代码的臃肿。

 

 # # 动态代理

 所谓的动态代理,就是先不写给谁提供代理,至于给谁提供代理就是需要传进来。

 看下边的截图,对比静态代理和动态代理低差别

 

  静态代理的截图:

代理模式_静态代理

   

  再看动态代理的截图:

代理模式_动态代理_02

  动态代理的调用过程:

代理模式_静态代理_03

   关键的地方就是构造方法,可以看到最大的区别是:静态代理是指定的 接口类名称,而动态代理用的是 Object,这就是唯一的区别。基于 java 语言本身的特性,所有类的祖先都是 Object。