Spring中JDK动态代理和CGLib代理之间的区别

Spring AOP是基于代理的。Spring使用了两种代理策略,一种是JDK动态代理,另一种是CGLIB代理。

JDK提供了JDK动态代理。它只能是按接口的代理,因此目标类需要实现接口。在您实现一个或多个接口时,spring会自动使用JDK动态代理。

另一方面,CGLIB是一个用于创建代理的第三方库。它可以通过子类化创建代理。如果类未实现接口,则Spring使用CGLIB作为代理。

序号JDK动态代理CGLIB代理
1
基本
它只能是按接口的代理,因此目标类需要实现接口
它可以通过子类化创建代理
2

Java可用
这是第三方库。
3
性能
比CGLIB代理慢一点
它比JDK动态代理更快
4。
FinalFinal类和Final方法不能被代理
Final类和Final方法不能被代理
5 ..
用例
当类实现一个或多个接口时,Spring使用JDK代理
当类未实现接口时,Spring使用CGLib代理