代理模式-

定义:为其他对象提供一种代理,以控制对这个对象的访问。

适用场景

保护目标对象,增强目标对象

优点

1、代理模式能将代理对象与真实被调用的目标对象分离。

2、在一定程度上降低了系统耦合,已于拓展。

3、代理可以起到保护目标对象的作用,增强目标对象的职责。

缺点

1、代理模式会造成系统设计中类的数目增加。

2、在客户端和目标对象之间增加了一个代理对象,请求处理速度变慢。增加了系统的复杂度。

生活中的代理模式:

1、房产中介

2、快递小哥

3、黄牛党

代理类型:

1、静态代理

显示声明被代理对象;

2、动态代理

     动态配置和替换被代理对象 ;

jdk动态代理实现原理:

1)拿到被代理类的引用,并且获取它的所有接口(反射获取)

2)jdk proxy类重新生成一个新的类,实现了被代理类所有接口的方法

3)动态生成java代码,把增强逻辑加入到新生成的代码中

4)编译生成新的java代码的class文件

5)加载并重新运行新的class,得到类的就是全新类

CGLib和JDK动态代理对比:

1)JDK动态代理是实现了被代理对象的接口,CGLib是继承了被代理对象

2)JDK和CGLib都是运行期生成字节码,JDK是直接写class字节码,CGLib是使用ASM框架写字节码,CGLib代理实现更复杂,生成代理类比JDK效率低

3)jdk调用代理方法,是通过反射机制调用,CGLib是通过FastClass机制直接调用方法,CGLib执行效率更高

注意:CGLib容易踩的坑:无法代理final修饰的方法

源码应用
               1)spring中当bean有实现接口,spring就会用JDK动态代理。当bean没有实现接口时,spring就会选择CGLib。Spring可以通过配置强制使用CGLib,只需spring的配置文件中加入如下代码  <aop:aspectj-autoproxy proxy-target-class="true">

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值