当前位置: 首页 > news >正文

SpringBoot 注解 @AutoConfiguration 在 2.7 版本中被新增(使用方法)

自 Spring Boot 2.7.0 版本起,关于自动配置进行了较大调整,要特别注意,主要内容如下。

1、自动配置注册文件

之前版本的自动配置类是写在 META-INF/spring.factories 文件中的,内容示例如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.MyAutoConfiguration1,\
com.example.MyAutoConfiguration2,\
com.example.MyAutoConfiguration3

2.7.0 版本开始,变更为写在 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件中,每行条记录,内容示例如下:

com.example.MyAutoConfiguration1
com.example.MyAutoConfiguration2
com.example.MyAutoConfiguration3

a) 编写格式确实是比之前方便多了,但文件名确实也太长了,比较难记。
b) 为了兼容性 META-INF/spring.factories 虽然现在被标识废弃了,但现在仍然可以使用,后续可能被彻底删除,建议使用新的规范。

2、新注解 @AutoConfiguration

新增了一个自动配置注解 @AutoConfiguration,用来代替之前的 @Configuration,用于标识新自动配置注册文件中的顶级自动配置类,由 @AutoConfiguration 注解嵌套、导入进来的其他配置类可以继续使用 @Configuration 注解。

另外,为方便起见,@AutoConfiguration 注解还支持 after, afterNames, beforebeforeNames 属性进行自动配置排序。

你可以把 @AutoConfiguration 在一定程度上理解为 @Configuration + @AutoConfigureAfter + @AutoConfigureBefore 的组合。

除此组合包装之外,在 @SpringBootApplication 自动加载时,使用 AutoConfigurationExcludeFilter 排除了 @AutoConfiguration 修饰的类,这样更明确的把 @AutoConfiguration 定义为自动配置类,所以使用 @AutoConfiguration 注解的类默认不会被 Spring 加载,你必须要主动配置到 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件中才可以正常被加载。

这个注解可以说细分的更加清晰了,即直接理解为自动配置专用注解,用专门的注解来干专门的事,这样也可以用来区分用 @Configuration 标识的普通配置类。

2.7 版本还新增的其他内容

  • 支持 GraphQL
  • 支持 Podman
  • 支持 RabbitStreamTemplate
  • 支持 Hazelcast
  • 支持 Cache2k
  • Web Server SSL 增强
  • info 端点增强
  • 单元测试加强

以上内容的新增,具体情况详见官网。

总结

Spring Boot 2.7.0 新增了不少新特性,变化还比较大,特别是自动配置的变更有明显调整,要特别注意。


(END)

相关文章:

  • Android常用C++特性之std::lock_guard
  • Spring自动装配的5种方式
  • Android中大量使用建造者模式(Builder Pattern)的原因可以归结为以下几点:
  • 【华为HCIP实战课程三】动态路由OSPF的NBMA环境建立邻居及排错,网络工程师
  • [Linux]僵尸进程,孤儿进程,环境变量
  • NGINX+LUA编译安装
  • 关于Obj文件格式介绍与Unity加载Obj文件代码参考
  • 9.24作业
  • vue实现左侧数据拖拽到右侧区域,且左侧数据保留且左侧数据不能互相拖拽改变顺序
  • 注册中心Eureka
  • 面试-2024年9月13号
  • I2C通信中的当前地址指针(CADDR)工作原理
  • 【韩顺平Java笔记】第3章:变量
  • Spring Boot 配置全流程 总结
  • 【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
  • [case10]使用RSQL实现端到端的动态查询
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【css3】浏览器内核及其兼容性
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 2017 年终总结 —— 在路上
  • 4个实用的微服务测试策略
  • angular学习第一篇-----环境搭建
  • Asm.js的简单介绍
  • js算法-归并排序(merge_sort)
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Promise初体验
  • Vue 重置组件到初始状态
  • Xmanager 远程桌面 CentOS 7
  • Yii源码解读-服务定位器(Service Locator)
  • 分布式熔断降级平台aegis
  • 构造函数(constructor)与原型链(prototype)关系
  • 如何解决微信端直接跳WAP端
  • 试着探索高并发下的系统架构面貌
  • 突破自己的技术思维
  • 小而合理的前端理论:rscss和rsjs
  • 学习笔记:对象,原型和继承(1)
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • #include
  • #nginx配置案例
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (2020)Java后端开发----(面试题和笔试题)
  • (4)STL算法之比较
  • (C#)获取字符编码的类
  • (day 12)JavaScript学习笔记(数组3)
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (三)mysql_MYSQL(三)
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (算法)硬币问题