一、背景 今天有小伙伴面试的时候被问到:Spring AOP中JDK 和 CGLib动态代理哪个效率更高? 二、基本概念 首先,我们知道Spring AOP的底层实现有两种方式:一种是JDK动态代理,另一种是CGLib的方式。 自Java 1.3以后,Java提供了动态代理技术,允许开发者在运行期创 ...
分类:
编程语言 时间:
2019-02-27 13:11:46
阅读次数:
185
一、背景 今天有小伙伴面试的时候被问到:Spring AOP中JDK 和 CGLib动态代理哪个效率更高? 二、基本概念 首先,我们知道Spring AOP的底层实现有两种方式:一种是JDK动态代理,另一种是CGLib的方式。 自Java 1.3以后,Java提供了动态代理技术,允许开发者在运行期创 ...
分类:
编程语言 时间:
2019-02-23 13:24:08
阅读次数:
225
1、下载源码,地址https://github.com/spring-projects/spring-framework/tags 下载自己想要的版本,我用的版本是 v5.1.5.RELEASE git clone https://github.com/spring-projects/spring- ...
分类:
编程语言 时间:
2019-02-22 23:19:37
阅读次数:
304
Cglib是基于类的代理,不需要基于接口,会生成目标对象类型的子对象,所以当需要被代理的类没有继承接口时,就可以使用Cglib代理。 过程如图所示: Cglib有三种类似的方式,下面一一举例,可能比较肤浅: 目标类: 方式一(工厂直接实现MethodInterptor接口): 方式二(内部类实现Me ...
分类:
其他好文 时间:
2019-02-21 23:07:55
阅读次数:
182
1、JDK动态代理利用拦截器(拦截器必须实现InvocationHanlder)加上反射机制生成一个实现代理接口的匿名类, 在调用具体方法前调用InvokeHandler来处理。 2、CGLiB动态代理利用ASM开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。 3、何时 ...
分类:
其他好文 时间:
2019-02-21 17:29:31
阅读次数:
215
第二、三种代理,都是动态时代理 ,但是我们看到也有差别: JDK的动态代理 ,只能实现接口代理,并且是包装的被代理对象(类的实例),也就是说,在代理的过程中,有2个对象,一个代理对象,一个目标对象,目标对象被包装在代理对象里面。 CGLib的代理,是继承目标对象,生成了一个新的类,然后来实现代理,这 ...
分类:
其他好文 时间:
2019-02-13 16:57:25
阅读次数:
166
本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Spring源码解析 https://blog.csdn.net/column/details/21851.html 部分代码会放在我的的Github:https://github.com/h2p ...
分类:
其他好文 时间:
2019-02-08 21:58:02
阅读次数:
221
一、方式 1. 代码生成器 & IDE 1. 编译时代码生成: Pluggable Annotation Processing API 1. 运行时代码生成: Compiler API 1. 运行时生成字节码: cglib, javassist 二、辅助工具 String format tool 模 ...
分类:
编程语言 时间:
2019-02-03 15:31:10
阅读次数:
229
代理模式:代理类和被代理类实现共同的接口(或继承),代理类中存有指向被代理类的索引,实际执行时通过调用代理类的方法、实际执行的是被代理类的方法。 而AOP,是通过动态代理实现的。 一、简单来说: JDK动态代理只能对实现了接口的类生成代理,而不能针对类 CGLIB是针对类实现代理,主要是对指定的类生 ...
分类:
其他好文 时间:
2019-01-19 20:07:19
阅读次数:
265