代理模式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/