为什么springboot使用cglib作为默认动态代理
https://www.bilibili.com/video/BV1zK4y1c7wJ/?spm_id_from=333.999.0.0&vd_source=a3fefff79a3be320da3db60b271f05c9
Spring Boot 选择使用 CGLIB 作为默认的动态代理实现是为了提供更广泛的代理支持,并在一些情况下提供更好的性能。以下是一些原因:
-
类代理支持: CGLIB 能够代理没有实现接口的类,而 JDK 动态代理要求目标对象实现至少一个接口。这为 Spring 提供了更大的灵活性,可以代理更多类型的类。
-
性能优势: CGLIB 通常比 JDK 动态代理更快,尤其是在创建大量代理对象的情况下。CGLIB 通过创建目标类的子类来实现代理,而 JDK 动态代理要求目标对象实现接口,这意味着 JDK 动态代理需要更多的反射调用,从而在某些情况下可能导致性能下降。
-
AOP(面向切面编程): Spring AOP 通常使用动态代理来实现切面。CGLIB 的能力允许 Spring 在不受限制的情况下代理目标对象,这在某些 AOP 场景中是必需的。
尽管 CGLIB 有这些优势,但也有一些注意事项。例如,CGLIB 不能代理 final 类的方法,可能导致某些场景下无法生成代理。在选择默认代理方式时,Spring Boot的设计考虑了这些因素,以提供更广泛、更灵活的代理支持。
需要注意的是,开发人员仍然可以通过配置来选择使用 JDK 动态代理。在某些场景下,如果需要强制使用 JDK 动态代理,可以进行相应的配置调整。
补充:
1、cglib动态代理的优缺点?
https://mikechen.cc/15522.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2021-11-29 5. 最长回文子串
2020-11-29 23种设计模式分类