springboot2 默认cglib的原因 spring5默认还是jdk代理

news/2024/9/28 1:13:34

https://www.163.com/dy/article/J8871AJ5055616YO.html

假设,我们有一个UserServiceImpl和UserService,此时需要在UserContoller中使用UserService。在 Spring 中通常都习惯这样写代码:

@Autowired UserService userService;

在这种情况下,无论是使用 JDK 动态代理,还是 CGLIB 都不会出现问题。

但是,如果你的代码是这样的呢:

@Autowired UserServiceImpl userService;

这个时候,如果我们是使用 JDK 动态代理,那在启动时就会报错:

启动报错

因为 JDK 动态代理是基于接口的,代理生成的对象只能赋值给接口变量。

而 CGLIB 就不存在这个问题。因为 CGLIB 是通过生成子类来实现的,代理对象无论是赋值给接口还是实现类这两者都是代理对象的父类。

SpringBoot 正是出于这种考虑,于是在 2.x 版本中,将 AOP 默认实现改为了 CGLIB。

更多的细节信息,读者可以自己查阅上述 issue。

总结

 

  1. Spring 5.x 中 AOP 默认依旧使用 JDK 动态代理。
  2. SpringBoot 2.x 开始,为了解决使用 JDK 动态代理可能导致的类型转化异常而默认使用 CGLIB。
  3. 在 SpringBoot 2.x 中,如果需要默认使用 JDK 动态代理可以通过配置项spring.aop.proxy-target-class=false来进行修改,proxyTargetClass配置已无效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/64946.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

青龙源码解析MPC

1. 全身运动学 青龙全身共31个自由度。 2个7自由度臂,2个头部自由度,3个腰部自由度,每个腿是6个自由度(髋关节3DOF,膝关节1DOF,踝关节2DOF) 共7+7+2+3+6+6=31 再加上浮动基座6自由度,总共37自由度。 2. 变量: 输入:13 * 3 = 39的纬度;约束:32 * 3的纬度Ac,Bc,A,B,Cc,…

网络安全C10-2024.9.21-burpsuite安装使用过程

1、安装burp,分别在本机上实现全局代理和局部代理,提供设置过程的说明文档; 确认burpsuite监听地址和端口:全局代理:全局上网生效,设备--->网络和Internet--->开启“使用代理服务器” 局部代理:仅浏览器生效,使用firefox浏览设置2、利用burp实现对https站点的抓包…

openwrt释放DHCP地址池命令

ssh连上openwrt后台 vim打开/tmp/dhcp.leases文件 删除你想要释放的ip那一行保存退出 然后执行/etc/init.d/dnsmasq restart 就可以释放掉这个ip地址将其分配给其它设备了

一次基于AST的大规模代码迁移实践

在研发项目过程中,我们经常会遇到技术架构迭代更新的需求,通过技术的迭代更新,让项目从新的技术特性中受益,但由于很多新的技术迭代版本并不能完全向下兼容,包含了很多非兼容性的改变(Breaking Changes),因此我们需要设计一款工具,帮助我们完成大规模代码自动迁移问题…

Leetcode 706. 设计哈希映射

1.题目基本信息 1.1.题目描述 不使用任何内建的哈希表库设计一个哈希映射(HashMap)。 实现 MyHashMap 类:MyHashMap() 用空映射初始化对象 void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中,则更新其对应的值 value 。 i…

易基因:eLife:早期中度产前酒精暴露(PAE)和母体饮食介导子代DNA甲基化变化 | WGBS研究

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 妊娠期间饮酒是导致儿童神经发育障碍的主要原因之一,高剂量饮酒可导致儿童出现认知、行为和神经发育障碍,但目前对于低至中等饮酒水平的影响尚不完全清楚。DNA甲基化是一种表观遗传机制,涉及在碳-1代谢过程…

实战教程!Zabbix 监控 Spark 中间件配置教程

本文将介绍以JMX方式监控Spark中间件。JMX具有跨平台、灵活性强、监控能力强、易于集成与扩展、图形化界面支持以及安全性与可配置性等多方面的优势,是监控Spark等复杂Java应用程序的重要工具之一。 Apache Spark 是一个开源的大数据处理框架,它提供了快速、通用和可扩展的数…

Linux单机最大并发到底是多少?

Linux单机最大并发到底是多少? - 知乎 (zhihu.com) 所谓C10K就是单机1w并发问题,其中IO复用epoll/kqueue/iocp等技术对于C10k问题的解决起到了非常重要的作用。 所谓C10W就是单机1000w并发问题,未来待解决 ========================================== 五元组数 一个五元组可…