您当前的位置: 首页 > 

梁云亮

暂无认证

  • 3浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

动态代理概述

梁云亮 发布时间:2022-04-19 14:39:02 ,浏览量:3

概念

动态代理是在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能增强的一种技术。

在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。

可以理解为运行期间,对象中方法的动态拦截,在拦截方法的前后执行功能操作。

代理类在程序运行期间,创建的代理对象称之为动态代理对象。

这种情况下,创建的代理对象,并不是事先在Java代码中定义好的。而是在运行期间,根据我们在动态代理对象中的“指示”,动态生成的。也就是说,你想获取哪个对象的代理,动态代理就会为你动态的生成这个对象的代理对象。

动态代理可以对被代理对象的方法进行功能增强。

有了动态代理的技术,那么就可以在不修改方法源码的情况下,增强被代理对象的方法的功能,在方法执行前后做任何你想做的事情。

一句话:动态代理其实就是JDK运行期间,动态创建class字节码文件并加载到JVM。代理类对象是在运行时,由JVM根据反射机制动态生成的。动态代理不需要定义代理类的.java源文件。

实现方式 JDK动态代理:

使用java反射包中的类和接口实现动态代理的功能。 反射包:java.lang.reflect 使用的类:

  • InvocationHandler
  • Method
  • Proxy
CGLIB动态代理:

cglib时第三方的工具库,用于创建代理对象。 cglib的原理是继承,cglib通过继承目标类,创建其子类,在子类中重写父类中同名的方法,实现功能的修改。因为cglib需要继承目标类,所以要求目标类不能是final的,方法也不能是final的。 cglib对于目标类的要求比较宽松,只要能继承就可以。 cglib在很多框架中使用,如mybatis,spring框架。

关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0390s