代理模式Proxy

一. 什么是代理

代理的名词:

  • 目标对象:被代理对象
  • 代理对象:增强后的代理对象

二. Java 实现代理的两种方式

1. 静态代理

1) 继承

代理对象继承目标对象,需要重写要增强的方法,缺点:产生的类过多。

2) 聚合

代理对象实现与目标对象相同的接口,代理对象中需要包含一个目标对象,缺点:同样会产生类,只是比继承的方式少一点。

2. 动态代理

1) 自定义动态代理

(1) 实现步骤:

  • a) 通过目标对象的接口反射获取接口信息,并生成一个源文件:$Proxy.java
  • b) 通过第三方编译技术,动态编译产生类文件:$Proxy.class
  • c) 通过 ClassLoader(URLClassLoader)技术,将产生的代理类加载到 JVM 中
  • d) 最后通过反射获得这个类的实例对象

(2) 缺点:

  • a) 需要生成中间文件
  • b) 需要动态编译 class
  • c) 需要 URLClassLoader 操作
  • d) IO 操作的性能消耗过高

2) JDK 动态代理

1) 源码流程分析:

3) CGLIB 代理


代理模式Proxy
https://cuilan.github.io/2020/09/18/spring/springioc/springioc03/
作者
zhang.yan
发布于
2020年9月18日
许可协议