为什么springboot使用cglib作为默认动态代理

https://www.bilibili.com/video/BV1zK4y1c7wJ/?spm_id_from=333.999.0.0&vd_source=a3fefff79a3be320da3db60b271f05c9

Spring Boot 选择使用 CGLIB 作为默认的动态代理实现是为了提供更广泛的代理支持,并在一些情况下提供更好的性能。以下是一些原因:

  1. 类代理支持: CGLIB 能够代理没有实现接口的类,而 JDK 动态代理要求目标对象实现至少一个接口。这为 Spring 提供了更大的灵活性,可以代理更多类型的类。

  2. 性能优势: CGLIB 通常比 JDK 动态代理更快,尤其是在创建大量代理对象的情况下。CGLIB 通过创建目标类的子类来实现代理,而 JDK 动态代理要求目标对象实现接口,这意味着 JDK 动态代理需要更多的反射调用,从而在某些情况下可能导致性能下降。

  3. AOP(面向切面编程): Spring AOP 通常使用动态代理来实现切面。CGLIB 的能力允许 Spring 在不受限制的情况下代理目标对象,这在某些 AOP 场景中是必需的。

尽管 CGLIB 有这些优势,但也有一些注意事项。例如,CGLIB 不能代理 final 类的方法,可能导致某些场景下无法生成代理。在选择默认代理方式时,Spring Boot的设计考虑了这些因素,以提供更广泛、更灵活的代理支持。

需要注意的是,开发人员仍然可以通过配置来选择使用 JDK 动态代理。在某些场景下,如果需要强制使用 JDK 动态代理,可以进行相应的配置调整。

 

补充:

1、cglib动态代理的优缺点?

https://mikechen.cc/15522.html

 

posted @ 2023-11-29 12:31  guoyu1  阅读(357)  评论(0编辑  收藏  举报