一文告诉你代理模式(设计模式学习)

代理模式

JDK动态代理实现原理

  1. 拿到被代理类的引用,并且获取它的所有接口(反射获取)
  2. JDK Proxy类重新生成一个类,实现被代理类所有接口方法
  3. 动态生成JAVA代码,把增强逻辑写入新生成的代码中
  4. 编译、生成新的java类
  5. 加载并重新运行class

cglib代理实现原理

  1. 生成一个继承了父类的包含所有逻辑的FastClass,调用效率更高
  2. 无法代理final的方法
  3. 使用asm框架书写class字节码文件

JDK和cglib区别

  1. 生成效率: JDK直接书写class字节码,cglib使用asm框架写class字节码,生成代理类效率比JDK低
  2. 执行效率: JDK反射动态调用更慢,cglib使用FastClass调用效率高
  3. 代理对象: JDK必须要目标类实现了接口,cglib不是final的类都可以

Spring中的代理模式(AOP)

ProxyFactoryBean

使用策略模式处理平级逻辑-使用cglib还是JDK(AopProxy)
主入口 getObject();

选择代理优先级
  1. Bean实现接口,优先JDK动态代理
  2. Bean没有实现接口,使用cglib
  3. spring可以配置强制使用cglib
Spring什么时候无法代理

目标对象如果是final类,也没有实现接口,就不能运用AOP

Spring中aop代理对象的生成aop代理对象的生成

processon文档

代理模式优点

  • 优点:
    1. 代理模式使代理对象和目标对象分,一定程度降低系统耦合度,易于扩展
    2. 代理可以起到保护目标对象
    3. 增强目标对象的功能
  • 缺点:
    1. 代理模式会让系统中的类数目增多
    2. 增加系统复杂度

PS: 才疏学浅,如有误导请指出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值