前言
当我们需要控制一个对象的访问,或者需要对一类方法做一些增强时,代理模式便可以很好的实现我们的需求。
1 定义
Proxy模式:为对象提供一种代理,以实现对这个对象访问的控制。
2 适用性
- 当需要控制对象的访问。
- 当需要对对象的功能做一些增强。
- 当我们需要做一些切面功能如:日志、登录拦截等。
3 结构
3.1 结构图
3.2 参与者
- Client:访问代理对象处理请求。
- Subject:抽象接口,代理和实际对象均实现该接口。
- ProxySubject:代理对象实现Subject,持有真实对象指针,控制对象的访问和其它操作。
- Realsubject:真实对象,处理真正的调用请求。
4 Spring实际应用举例
Spring Aop大量使用了代理包括CGLIB代理和JDK动态代理,我们以Spring Aop的JDK动态代理为例。
4.1 Proxy——JdkDynamicAopProxy
JdkDynamicAopProxy最终调用的是Proxy.newProxyInstance生成对象如下:
该JdkDynamicAopProxy继承结构如下:
实现的invoke方法负责处理对代理对象的访问控制,具体过程可以参考源码。
5 总结
Proxy代理模式,应用非常广泛,其中spring框架的Aop实现就大量使用了代理模式,从而可以方便处理我们的切面控制等。
参考文献
[1]. 《设计模式》