动态代理的几种实现方式及优缺点

一、文章要点提前知

二、动态代理的本质

1、首先了解一下动态代理类对应的class文件是什么时候生成的?

首先通过一张图了解一下Java源文件实例对象的一个简单的流程:

2、动态代理的本质
简述:通过一定的技术,省略源文件的编写,直接在运行期间,生成相应的Java字节码文件;

三、JDK原生动态代理

1、JDK原生动态代理中两个重要的小伙伴

a、Proxy:Proxy是所有动态代理的父类;它提供了一个静态的方法创建代理的Class对象来配置生成代理类Class文件的方法与参数,主要就是通过Proxy.newProxyInstance(类加载器,类实现的接口,InvocationHandler实现类),返回Object类型,通过接口类型强转换即可使用代理类;

b、InvacationHandler:每个动态代理实例都有一个关联的InvocationHandler;被代理类的代理方法被调用时,方法将被转发到InvocationalHandler的invoke方法执行。

c、小结:Proxy就是用来生成代理类的,InvocationalHandler使用来对被代理方法进行扩展的

2、原理图下:

3、实战演练

a、实体类

b、被代理类实现接口

c、被代理类

d、JDK动态代理实现类

e、测试类

f、测试结果

4、总结:两个个要素
a、被代理类必须实现一个接口

b、InvocationalHandler只是用来做业务增强的,并不能真正的实现业务,也就是内部还是需要调用被代理类的业务方法去实现业务,不能对业务内部进行修改

四、CGLB动态代理

CGLB全称是Code Generation Library,是一个基于ASM的字节码生成库,允许我们在运行时对字节码文件进行修改和动态生成。

1、CGLB的两个小伙伴

a、Enchancer:来指定要代理的目标对象;实际处理逻辑的对象;最终通过create()方法得到代理对象,对这个对象的非final()方法的调用都会转发给代理对象;
b、MethodInterceptor:动态代理的方法调用都会转发到intercept()上进行增强;
2、原理图

3、实战演练

a、添加依赖

b、被代理类

c、CGLB动态代理实现类

d、测试类

e、测试结果

4、总结:

a、CGLB动态代理实现方式降低了被代理对象的要求

b、CGLB动态代理对于被代理对象的final方法无法进行增强

五、两种动态代理的优缺点对照表

六、下期内容预告

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值