动态代理基础

本文介绍了动态代理的基础知识,包括动态代理模式的作用和灵活性。详细讲解了JDK动态代理和CGLIB动态代理的原理,强调了InvocationHandler接口在JDK动态代理中的核心地位。此外,还探讨了CGLIB如何通过ASM生成子类实现代理,并提到了多层动态代理在Spring中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态代理不是什么难题,但是涉及的内容还不少,需要你全面的了解动态代理相关的知识,说实话,只在应用层面去搞清楚,已经是个比较轻松的活了。

一、动态代理模式介绍

动态代理的作用主要是能不侵入修改目标类的情况下完成逻辑的变动,同时它能够运行时操作,这样一定程度上增加了生成代理的灵活性。
在知道动态代理大概的实现方式后,会有一个很大的误区,我们知道JDK 动态代理是基于接口作实现,cglib是基于目标类作继承,他们2者都会产生一个新的代理类,同时也会有代理对象,但是千万别忘记,是先产生目标对象的,在调用处理器时,需要将代理对象传递进去,但是通过反射进行目标方法调用时,传递的是目标对象,代理对象传进去,没有使用,所以,这里不会产生多态的,因为是通过反射进行调用的。

二、JDK动态代理

jdk动态代理的原理是:

  1. 创建一个实现了代理接口的代理类的字节码文件。
  2. 将这个创建出来的字节码文件加载到JVM中,生成一个新的类(代理类)。
  3. 创建这个新生成的类(代理类)的实例对象,这个新生成的类中包含了对原始类的调用。

JDK代理的主要核心在于
java.lang.reflect.InvocationHandler
这个接口,你必须要提供一个这个接口的实现,因为这个是代理的逻辑所在,你既然要代理目标,自然是有一些目标类没有做的事情要做,这里就是你想要补充逻辑的地方,所以他是你最应该关心和理解的地方,代

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值