十八、代理模式
本文最后更新于 408 天前,其中的信息可能已经有所发展或是发生改变。

Proxy Design Pattern

作用

对原有功能进行增强,注意这里的增强是增加额外的功能,和原有功能无关。

使用场景

业务系统中增加非功能性需求,比如:监控、统计、鉴权、限流、事务、幂等、日志等。

还可以实现接口缓存,通过请求参数决定使用缓存还是实时查询。

实现方式

静态代理

代理接口

代理类和被代理类实现同样的接口,通过组合的形式,进行被代理方法的调用和增强。

代理类

代理类继承被代理类,通过重写,来实现对被代理方法的调用和增强。

JDK动态代理

创建代理类

  1. 生成代理类的class文件,可通过JVM参数配置,保存代理类到本地,再反编译看。生成的代理类继承了Proxy,所以JDK动态代理只能代理接口。
  2. 加载class,利用反射创建代理类

调用代理方法

  1. 调用代理类的代理方法
  2. 代理方法里调用InvocationHandler实现类里的增强方法,并将参数传递过去
  3. 增强方法里利用反射,再带着参数去调用被代理的方法

实战

实战代理模式,模拟Mybatis

CGlib动态代理

实战

动态代理+读写锁实现线程安全的HashMap缓存工具类

作者:Yuyy
博客:https://yuyy.info
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇