目录
@(深度分析代理模式)
深度分析代理模式
- 掌握代理模式的应用场景
- 了解静态代理和动态代理的区别
- 了解CGLib和JDK Proxy的根本区别
- 手写实现定义的动态代理
内容定位
- 都知道SpringAOP时用代理模式实现,到底是怎么实现的呢?
- 自己仿真手写还原部分细节
代理模式的定义
代理模式(Proxy Pattern)是指为其他对象提供一种代理,以控制对这个对象的访问。
代理对象在客户端和目标对象之间起到中介作用。
属于结构型设计模式
生活中的代理模式
- 房产中介
- 快递小哥
- 黄牛党
代理模式的使用场景
- 保护目标对象
- 增强目标对象
静态代理
- 显示声明被代理对象
eg数据源路由:动态切换数据源
缺陷
不符合开闭原则,只要被代理的那个类需要新的代理,都需要在代理类中新加方法
动态代理($Proxy0)
- 拿到被代理类的引用,并且获取他所有的接口(反射获取)需要实现接口
- JDK Proxy类重新生成新的类,实现了被代理类所有接口的方法
- 动态生成Jav代码,把增强逻辑加入到新生成的代码中。
- 编译生成新的java代码的class文件
- 加载并重新运行新的class,得到的类就是全新的类
Proxy是一个用来生成新的代理类的工具类
为什么这个类的接口的长度不能大于65535?