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


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

JDK 动态代理随 JDK 一起提供。它只能通过接口进行代理,因此目标类需要实现接口。如果您的类实现了 一个或多个接口,那么 Spring 将自动使用 JDK 动态代理。

另一方面,CGLib 是一个第三方库,Spring 使用它来创建代理。它可以通过子类化创建代理。如果类没有实现接口,Spring 将使用 CGLib 进行代理。

序号关键JDK 动态代理CGLib 代理
1
基础
它只能通过接口进行代理,因此目标类需要实现接口
它可以通过子类化创建代理
2

它随 Java 一起提供
它是一个第三方库。
3
性能
它比 CGLib 代理稍微慢一些
它比 JDK 动态代理快
4.
最终
最终类和最终方法不能被代理
最终类和最终方法不能被代理
5..
用例
当类实现一个或多个接口时,Spring 使用 JDK 代理
当类没有实现接口时,Spring 使用 CGLib 代理

更新于: 2020-09-09

3K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告