赞
踩
天再高又怎样,踮起脚尖就更接近阳光。
本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;公号后台回复“专栏列表”获取全部小而美的原创技术专栏
你好,我是方向盘(YourBatman)。笔者的公号是保留地,只分享原创,不转载、不发商务广告!
北京时间2021-11-17,Spring Boot 2.6.0
正式发布。回忆一下上次发版还是上次,相比于2.5.0版本的打酱油,本次的升级点更猛些。
2.5.0版本的新特性在这里:【方向盘】Spring Boot 2.5.0正式发布,环境变量可指定前缀的功能很赞)
说明:Spring Boot 2.6.1随后作为补丁版本立马发布了,修复了若干问题。因此保持习惯,生产上请尽量保持最新的(小)版本
关于版本号,从2.4.x 版本开始版本号不带 .RELEASE 后缀了!通过表格描述下Spring Boot各个版本现在的更新、维护状况:
版本 | 发布时间 | 停止支持时间 | 停止商业支持时间 |
---|---|---|---|
2.6.x | 2021-11-17 | 2022-11-24(1年) | 2024-02-24(2年+) |
2.5.x | 2021-05-20 | 2022-05-19(1年) | 2023-08-24(2年+) |
2.4.x | 2021-11-12 | 2022-11-18(1年) | 2023-02-23(2年+) |
2.3.x | 2020-05-16 | 2022-05-20(1年) | 2022-01-16(2年+) |
2.2.x | 2019-10-16 | 2020-10-16(1年) | 2021-01-30(2年+) |
2.1.x | 2018-10-30 | 2019-10-30(1年) | 2021-01-30(2年+) |
2.0.x | 2018-03-01 | 2019-03-01(1年) | 2020-06-01(2年+) |
1.5.x | 2017-01-30 | 2019-08-06(2.5年) | 2020-11-06(近4年) |
Spring Boot每年会在5月份和11月份发布两个中型版本(一般都会有部分不向下兼容的情况,升级需谨慎),每个中型版本提供1年的支持(免费),提供2年+的商业支持(付费)。按此节奏可知:Spring Boot 2.6.0发布也宣布着2.4.x版本停止(免费)支持,而2.7.0版本预计会在2022年的5月份和大家见面。
Spring Boot终究忍不住,禁止(Bean的)循环引用了!!!
注意:只是Spring Boot默认禁止了,但Spring Framework默认还是允许的哦
对于有代码洁癖的开发者来说,看到循环引用的代码是“不舒服”的。在业务开发中,有一种声音是:循环引用不可避免,但实际上应该思考:若出现了循环引用,必定是结构设计上不合理导致,有优化空间!若你是个有追求的程序员,是可以很容易发现这种不合理的。
什么是循环引用?
如图,循环引用一般指A引用B,B又引用了A。更极端一点的循环引用case可以是:A引用A,本文将以此为例进行代码演示。
什么是循环依赖?它是循环引用的一种具象形式,如Spring Bean之间的循环依赖就属于循环引用。大多数情况下,可认为循环依赖和循环引用语义上是相同的。
在Spring Boot场景下,准备Bean循环依赖的基础代码:
/** * 在此处添加备注信息 * * @author YourBatman. <a href=mailto:yourbatman@aliyun.com>Send email to me</a> * @site https://yourbatman.cn * @date 2021/12/11 20:43 * @since 0.0.1 */ @Service public class AService { @Autowired private AService aService; @PostConstruct private void init() { System.out.println("循环依赖:" + (this == aService)); } }
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.7</version>
</parent>
启动Spring Boot应用,控制台输出:
结果:正常启动。这便是我们口头上常说的:Spring已经解决了Bean的循环依赖问题
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.0</version>
</parent>
启动Spring Boot应用,控制台输出:
结果:启动失败。这便是从Spring Boot 2.6.0版本起禁止了循环引用的结果
文上有说到,循环引用属于不合理的设计,但并非不能正常工作。这就像每个程序员都吐槽过屎山代码依旧能正常work同一个道理:它不好,但有意义。
既然“不合理”,那就有理由规避。针对循环引用的解决方案,总结一下主要有两种:
好,这很好!难,这很难!本方案是最好的,也是最难的,Spring团队当然最喜欢你这么去做,做难事必有所得嘛!
从Spring Boot 2.6.0开始的这个默认行为(不允许循环引用)能感受到:循环引用的编码方式是不被推荐的,是坏味道的代码。为此,期望正在看本文的coder给自己立个flag哈:不再写循环引用的代码,尽量吧
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。