代理模式
- 特定环境:要求在原来基础上增加额外功能,但不能修改源代码
- 一类问题:在不更改或无法更改源代码的前提下,在其基础上增加额外逻辑
- 解决方案:静态/动态代理
功能
- 预处理
- 过滤
- 事后处理
分类
透明代理:不能直接使用被代理类,只可以通过代理类来使用
强制代理:被代理类指定代理类,仅可通过该代理类来访问它
代理类的个性化:代理类在实现被代理类接口的同时,可实现其他独有接口
静态代理:显式创建代理类
动态代理:运行时,创建代理类,实现额外功能,常见实现方式有:jdk InvocationHandler 和cglib MethodInterceptor
jdk InvocationHandler
主要通过Java的反射机制实现
运行时,动态创建代理类
该方式,要求被代理类必须实现若干接口
另外,该方式,也避免静态代理中,代理类需要实现多个接口的繁杂
cglib MethodInterceptor
相对于jdk类库的动态代理,此方式更加通用
因为,并不需要代理类实现接口
本质上,通过创建代理类的子类来实现代理,也就是继承。