为什么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 @   guoyu1  阅读(625)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2021-11-29 5. 最长回文子串
2020-11-29 23种设计模式分类
点击右上角即可分享
微信分享提示