服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Spring Boot 2.6.0正式发布,循环引用终于被禁

Spring Boot 2.6.0正式发布,循环引用终于被禁

2021-12-13 23:26Java方向盘方向盘 Java教程

北京时间2021年11月17日,Spring Boot 2.6.0正式发布。回忆一下上次发版还是上次,相比于2.5.0版本的打酱油,本次的升级点更猛些。

Spring Boot 2.6.0正式发布,循环引用终于被禁

前言

北京时间2021-11-17,Spring Boot 2.6.0正式发布。回忆一下上次发版还是上次,相比于2.5.0版本的打酱油,本次的升级点更猛些。

2.5.0版本的新特性在这里:【方向盘】Spring Boot 2.5.0正式发布,环境变量可指定前缀的功能很赞)

说明:Spring Boot 2.6.1随后作为补丁版本立马发布了,修复了若干问题。因此保持习惯,生产上请尽量保持最新的(小)版本

所属专栏

  • 【方向盘】-Spring Boot新特性

相关下载

  • 【本专栏源代码】:https://github.com/yourbatman/FXP-java-ee
  • 【技术专栏源代码大本营】:https://github.com/yourbatman/tech-column-learning
  • 【女娲Knife-Initializr工程】访问地址:http://152.136.106.14:8761
  • 【程序员专用网盘】公益上线啦,注册送1G超小容量,帮你实践做减法:https://wangpan.yourbatman.cn
  • 【Java开发软件包(Mac)】:https://wangpan.yourbatman.cn/s/rEH0 提取码:javakit

版本约定

Spring Boot 2.6.0

正文

关于版本号,从2.4.x 版本开始版本号不带 .RELEASE 后缀了!通过表格描述下Spring Boot各个版本现在的更新、维护状况:

Spring Boot 2.6.0正式发布,循环引用终于被禁

Spring Boot每年会在5月份和11月份发布两个中型版本(一般都会有部分不向下兼容的情况,升级需谨慎),每个中型版本提供1年的支持(免费),提供2年+的商业支持(付费)。按此节奏可知:Spring Boot 2.6.0发布也宣布着2.4.x版本停止(免费)支持,而2.7.0版本预计会在2022年的5月份和大家见面。

2.6版本主要新特性

禁止循环引用

Spring Boot终究忍不住,禁止(Bean的)循环引用了!!!

注意:只是Spring Boot默认禁止了,但Spring Framework默认还是允许的哦

对于有代码洁癖的开发者来说,看到循环引用的代码是“不舒服”的。在业务开发中,有一种声音是:循环引用不可避免,但实际上应该思考:若出现了循环引用,必定是结构设计上不合理导致,有优化空间!若你是个有追求的程序员,是可以很容易发现这种不合理的。

什么是循环引用?

Spring Boot 2.6.0正式发布,循环引用终于被禁

如图,循环引用一般指A引用B,B又引用了A。更极端一点的循环引用case可以是:A引用A,本文将以此为例进行代码演示。

什么是循环依赖?它是循环引用的一种具象形式,如Spring Bean之间的循环依赖就属于循环引用。大多数情况下,可认为循环依赖和循环引用语义上是相同的。

在Spring Boot场景下,准备Bean循环依赖的基础代码:

  1. /**
  2. * 在此处添加备注信息
  3. *
  4. * @author YourBatman. Send email to me
  5. * @site https://yourbatman.cn
  6. * @date 2021/12/11 20:43
  7. * @since 0.0.1
  8. */
  9. @Service
  10. public class AService {
  11. @Autowired
  12. private AService aService;
  13. @PostConstruct
  14. private void init() {
  15. System.out.println("循环依赖:" + (this == aService));
  16. }
  17. }

2.6.0之前版本(以2.5.x为例)


  1. org.springframework.boot
  2. spring-boot-starter-parent
  3. 2.5.7

启动Spring Boot应用,控制台输出:

Spring Boot 2.6.0正式发布,循环引用终于被禁

结果:正常启动。这便是我们口头上常说的:Spring已经解决了Bean的循环依赖问题

2.6.0及之后版本


  1. org.springframework.boot
  2. spring-boot-starter-parent
  3. 2.6.0

启动Spring Boot应用,控制台输出:

Spring Boot 2.6.0正式发布,循环引用终于被禁

结果:启动失败。这便是从Spring Boot 2.6.0版本起禁止了循环引用的结果

如何解决循环引用?

文上有说到,循环引用属于不合理的设计,但并非不能正常工作。这就像每个程序员都吐槽过屎山代码依旧能正常work同一个道理:它不好,但有意义。

既然“不合理”,那就有理由规避。针对循环引用的解决方案,总结一下主要有两种:

确保循环引用不再存在:整改/优化业务逻辑

允许循环引用:无需改代码

方案一:确保循环引用不再存在

好,这很好!难,这很难!本方案是最好的,也是最难的,Spring团队当然最喜欢你这么去做,做难事必有所得嘛!

从Spring Boot 2.6.0开始的这个默认行为(不允许循环引用)能感受到:循环引用的编码方式是不被推荐的,是坏味道的代码。为此,期望正在看本文的coder给自己立个flag哈:不再写循环引用的代码,尽量吧

延伸 · 阅读

精彩推荐
  • Java教程SpringBoot整合freemarker的讲解

    SpringBoot整合freemarker的讲解

    今天小编就为大家分享一篇关于SpringBoot整合freemarker的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来...

    Haozz_199410762021-07-02
  • Java教程详解SpringBoot开发案例之整合定时任务(Scheduled)

    详解SpringBoot开发案例之整合定时任务(Scheduled)

    本篇文章主要介绍了详解SpringBoot开发案例之整合定时任务(Scheduled),具有一定的参考价值,有兴趣的可以了解一下...

    小柒3882020-12-05
  • Java教程Spring Data的Domain Event的用法详解

    Spring Data的Domain Event的用法详解

    这篇文章主要介绍了Spring Data的Domain Event的用法详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    汪云飞记录本10882021-04-08
  • Java教程一文解决springboot打包成jar文件无法正常运行的问题

    一文解决springboot打包成jar文件无法正常运行的问题

    这篇文章主要介绍了一文解决springboot打包成jar文件无法正常运行的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要...

    xiaoxiong_blog10982020-07-09
  • Java教程java代码实现俄罗斯方块

    java代码实现俄罗斯方块

    这篇文章主要为大家详细介绍了java代码实现俄罗斯方块,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    angry_youth5612021-05-11
  • Java教程Java基本数据类型(动力节点java学院整理)

    Java基本数据类型(动力节点java学院整理)

    Java数据类型(type)可以分为两大类:基本类型(primitive types)和引用类型(reference types)。下面是动力节点给大家整理java基本数据类型相关知识,感兴趣...

    Java教程网5172020-09-04
  • Java教程详细介绍高性能Java缓存库Caffeine

    详细介绍高性能Java缓存库Caffeine

    本篇文章主要介绍了详细介绍高性能Java缓存库Caffeine,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    oopsguy5452021-03-30
  • Java教程Java Arrays.sort()用法详解

    Java Arrays.sort()用法详解

    这篇文章主要介绍了Java Arrays.sort()用法详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    barry_gfw10422021-11-18