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 代理 |
广告