CGLIB
利用ASM字节码框架,将代理对象生成的class文件加载,修改其字节码,采用继承方式,生成子类进行处理。
Cglib针对类实现代理,主要针对指定的类生成子类,并覆盖目标方法,达到增强的效果。
由于是使用继承,所以对于final的类或者方法,无法代理
JDK
通过反射机制生成代理接口的匿名类。主要针对接口,而非类。
Spring的选择
- Bean实现接口,选用JDK
- Bean没有实现接口,选用CGLIB
利用ASM字节码框架,将代理对象生成的class文件加载,修改其字节码,采用继承方式,生成子类进行处理。
Cglib针对类实现代理,主要针对指定的类生成子类,并覆盖目标方法,达到增强的效果。
由于是使用继承,所以对于final的类或者方法,无法代理
通过反射机制生成代理接口的匿名类。主要针对接口,而非类。