理解设计模式(代理)

代理模式,屏蔽真实对象,仅提供其代理,供系统使用

代理模式

  • 特定环境:要求在原来基础上增加额外功能,但不能修改源代码
  • 一类问题:在不更改或无法更改源代码的前提下,在其基础上增加额外逻辑
  • 解决方案:静态/动态代理

功能

  • 预处理
  • 过滤
  • 事后处理

分类

透明代理:不能直接使用被代理类,只可以通过代理类来使用

强制代理:被代理类指定代理类,仅可通过该代理类来访问它

代理类的个性化:代理类在实现被代理类接口的同时,可实现其他独有接口

静态代理:显式创建代理类

动态代理:运行时,创建代理类,实现额外功能,常见实现方式有:jdk InvocationHandler 和cglib MethodInterceptor

jdk InvocationHandler

主要通过Java的反射机制实现
运行时,动态创建代理类

该方式,要求被代理类必须实现若干接口
另外,该方式,也避免静态代理中,代理类需要实现多个接口的繁杂

cglib MethodInterceptor

相对于jdk类库的动态代理,此方式更加通用
因为,并不需要代理类实现接口
本质上,通过创建代理类的子类来实现代理,也就是继承

参考

动态代理的两种方式:Proxy和Cglib

Java动态代理一——动态类Proxy的使用

Java动态代理二——CGLIB动态代理应用

原文地址:https://www.cnblogs.com/CoolSoul/p/4984852.html