Spring代理

1、概述:

代理(Proxy)是一种设计模式。提供了对目标对象另外的访问方式;即通过代理 访问目标对象。这样好处是可以在目标对象实现的基础上,增强额外的功能操作。 (扩展目标对象的功能)
代理模式的关键点:代理对象和目标对象

2、代理的类型:

静态代理:静态代理,是指程序运行前就已经存在了代理类的字节码文件,代 理类和被代理类的关系在运行前就已经确定
特点
① 可以在不修改目标对象的功能前提下,对目标对象功能扩展
② 因为代理对象,需要与目标对象实现一样的接口,所以会有很多代理类(类 太多)
③ 一旦接口增加方法,目标对象和代理对象就要维护(维护麻烦)
④ 一个静态代理类只代理一个具体类。如果需要对实现了同一接口的不同具 体类作代理,静态代理需要为每一个具体类创建相应的代理类

动态代理:动态代理类的字节码是在程序运行期间的动态生成,所以不存在代 理类的字节码文件,代理类和被代理类的关系是在程序运行时确定 的
JDK从1.3开始引入动态代理,可以通过java.lang.refiect.Proxy类的静态方法Proxy.newProxyInstance动态创建代理类和实例,并且由它动态创建出来的代理类都是Proxy类的子类

3、代理行为:

代理类往往会在代理对象业务逻辑前后增加一些功能性的行为,如使用事务或 者打印日志。把这些行为称之为代理行为

4、Spring AOP底层实现原理—代理模式:

Spring的AOP有JDK动态代理和cglib两种实现方式,JDK动态代理要求被 代理对象实现接口;
Cglib通过动态继承实现,因此不能代理被final修饰的类;JDK动态代理生成 代理对象速度比cglib快;
Cglib生成的代理对象比JDK动态代理生成的代理对象执行效率高

5、JDK代理和cglib代理对比:

字节码创建方式:JDK动态代理通过JVM实现代理类字节码的创建,cglib 通过ASM创建字节码
对被代理对象的要求:JDK动态代理要求被代理对象实现接口,cglib要求被代理对象未被final修饰
代理对象创建速度:JDK动态代理创建代理对象速度比cglib快
代理对象执行速度:cglib代理对象执行速度比JDK动态代理快

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值