Spring中jdk动态代理和cglib动态代理各自的实现方式与优缺点

在Spring框架中,aop是基于代理模式才能实现的功能,Spring给我们提供了两种代理模式:jdk动态代理和cglib动态代理。他们各有优缺点。

jdk动态代理

jdk动态代理是jdk自带的,所以使用它不需要额外导入jar包,它是基于反射机制实现的,当需要代理的真实类继承了接口时,spring默认使用jdk动态代理。

cglib动态代理

cglib动态代理需要导入相应jar包,它是基于字节码的,是生成了代理真实类的子类,无论代理真实类有没有实现接口都可以使用。

手动设置代理方式

在spring aop中,可以手动设置使用哪种代理方式,只需在spring配置文件中加入以下代码:

<aop:aspectj-autoproxy
proxy-target-class="true"></aop:aspectj-autoproxy>

设置为 true 使用 cglib;
设置为 false 使用 jdk,但是要注意,如果需要代理的真实类没有实现接口,不能强制使用jdk动态代理。

你可能感兴趣的:(Spring中jdk动态代理和cglib动态代理各自的实现方式与优缺点)