动态代理.

什么是动态代理

动态代理即是在程序运行过程中动态地创建代理对象,动态代理是基于反射的,动态代理分为jdk动态代理以及cglib东岱 代理

什么是反射

反射是指在运行过程中,我们通过类的名称或者实例对象就可以拿到对应的class对象,通过这个对象可以获得这个类的所有方法以及属性,甚至可以修改这些属性

而class对象是通过类加载得来的

动态代理可以做什么

我们可以通过一个代理类来调用一个目标类,可以让调用者是实现者进行解耦;不仅如此,在通过代理调用的过程中我们还可以在代理中增强代码,即在调用目标功能前后加上我们自己需要的功能

JDK动态代理

JDK动态代理是基于接口的,要求被代理类一定有继承接口

实现过程如下:

首先创建一个切面类去继承InvocationHanlder接口,然后重写里面的invoke方法,然后书写一个获取代理类的方法

将一个目标实现类的实例传给切面类里生成代理对象方法,这个方法会根据传进来的实例拿到对应的类加载器以及实现接口,再以上两个参数的基础上加上一个切面类实例,通过这三个参数生成一个代理类

将这个代理类强转成目标接口实例,然后这个实例去调用对应的目标方法,这个调用将会被代理类所拦截转而去执行invoke方法,invoke方法通过反射的方式再去调用目标类的方法

cglib动态代理

cglib是一个第三方工具库,使用的过程需要引入对应的jar包

它实现动态代理的原理是继承,cglib通过生成一个目标类的子类,然后在子类中重写父类同名的方法,以实现功能的调用甚至是修改

由于cglib是基于继承重写方法的,因此要求目标类不能是final且目标方法也不能是final
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值