动态代理不是什么难题,但是涉及的内容还不少,需要你全面的了解动态代理相关的知识,说实话,只在应用层面去搞清楚,已经是个比较轻松的活了。
一、动态代理模式介绍
动态代理的作用主要是能不侵入修改目标类的情况下完成逻辑的变动,同时它能够运行时操作,这样一定程度上增加了生成代理的灵活性。
在知道动态代理大概的实现方式后,会有一个很大的误区,我们知道JDK 动态代理是基于接口作实现,cglib是基于目标类作继承,他们2者都会产生一个新的代理类,同时也会有代理对象,但是千万别忘记,是先产生目标对象的,在调用处理器时,需要将代理对象传递进去,但是通过反射进行目标方法调用时,传递的是目标对象,代理对象传进去,没有使用,所以,这里不会产生多态的,因为是通过反射进行调用的。
二、JDK动态代理
jdk动态代理的原理是:
- 创建一个实现了代理接口的代理类的字节码文件。
- 将这个创建出来的字节码文件加载到JVM中,生成一个新的类(代理类)。
- 创建这个新生成的类(代理类)的实例对象,这个新生成的类中包含了对原始类的调用。
JDK代理的主要核心在于
java.lang.reflect.InvocationHandler
这个接口,你必须要提供一个这个接口的实现,因为这个是代理的逻辑所在,你既然要代理目标,自然是有一些目标类没有做的事情要做,这里就是你想要补充逻辑的地方,所以他是你最应该关心和理解的地方,代