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

SpringBoot3.0不建议使用spring.factories,使用AutoConfiguration.imports新的自动配置方案

文章目录

  • 一、写在前面
  • 二、使用imports文件
    • 1、使用
    • 2、示例比对
    • 3、完整示例
  • 参考资料

一、写在前面

spring.factories是一个位于META-INF/目录下的配置文件,它基于Java的SPI(Service Provider Interface)机制的变种实现。
这个文件的主要功能是允许开发者声明接口的实现类,从而实现SpringBoot的自动装配和扩展点注册

这个文件在SpringBoot2.7以前,真就是SpringBoot的扩展神器,各种自动配置的插件几乎都是基于这种方式来实现的。
但是SpringBoot2.7以后,spring.factories就不是最优解了,而是替换为了META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

具体文档地址:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.7-Release-Notes#changes-to-auto-configuration
在这里插入图片描述
以下是翻译:
在这里插入图片描述
简单来说,只需要创建一个META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,每一行都是一个自动配置的条目即可,用法比以前简洁不少。

而以前的spring.factoriesorg.springframework.boot.autoconfigure.EnableAutoConfiguration键已经被删除了,详情:
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide
在这里插入图片描述

在这里插入图片描述

二、使用imports文件

1、使用

从SpringBoot 3.0开始,引入了基于imports文件的新机制,作为spring.factories的替代方案。这些文件位于META-INF/spring/目录下,每种类型的扩展点对应一个专门的文件:
在这里插入图片描述

2、示例比对

旧方式(spring.factories):

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.FooAutoConfiguration,\
com.example.BarAutoConfiguration

新方式(AutoConfiguration.imports):

com.example.FooAutoConfiguration
com.example.BarAutoConfiguration

3、完整示例

// 1. 创建配置属性类
@ConfigurationProperties(prefix = "myapp")
publicclass MyProperties {
    privateboolean enabled = true;
    private String name = "default";
    
    // getter和setter方法
    // ...
}

// 2. 创建自动配置类
@AutoConfiguration// 注意这里使用了@AutoConfiguration而非@Configuration
@EnableConfigurationProperties(MyProperties.class)
@ConditionalOnProperty(prefix = "myapp", name = "enabled", havingValue = "true", matchIfMissing = true)
publicclass MyAutoConfiguration {
    
    privatefinal MyProperties properties;
    
    public MyAutoConfiguration(MyProperties properties) {
        this.properties = properties;
    }
    
    @Bean
    @ConditionalOnMissingBean
    public MyService myService() {
        // 根据属性创建服务
        returnnew MyServiceImpl(properties.getName());
    }
}

3、然后,在META-INF/spring/目录下创建org.springframework.boot.autoconfigure.AutoConfiguration.imports文件:

com.example.MyAutoConfiguration

参考资料

https://mp.weixin.qq.com/s/VQh1xwAhajoPM9I1DnTs1Q

相关文章:

  • RabbitMQ 学习整理1 - 基础使用
  • C++中的explicit关键字
  • STM32收发数据包中间件——ProtoFlow,更方便的打包解包助手
  • SpringCloud入门、搭建、调试、源代码
  • 洛谷题单1-B2002 Hello,World!-python-流程图重构
  • 【QT继承QLabel实现绘制矩形、椭圆、直线、多边形功能,并且支持修改大小,移动位置,复制,粘贴,删除功能】
  • 后端学习day1-Spring(八股)--还剩9个没看
  • Pytorch学习笔记(八)Learn the Basics - Save and Load the Model
  • Vue 中异步数据加载与方法调用顺序问题:`await` 的正确使用
  • 前端批量导入方式
  • 【深度学习的数学】导数
  • 【Java】抽象类和接口
  • vue3中ref和reactive的差异分析
  • C++中的异常和智能指针
  • 基础图表(一)
  • ClickHouse与TiDB实操对比:从入门到实战的深度剖析
  • vue遗漏的知识点(动态组件.)
  • Vue.js 和 Vue 3 全面详解指南
  • Open CASCADE学习|小球沿样条曲线运动
  • MP4音视频格式
  • 人民日报:应对外贸行业风险挑战,稳企业就是稳就业
  • 体坛联播|利物浦提前4轮夺冠,安切洛蒂已向皇马更衣室告别
  • 我国已形成完整人工智能产业体系,专利申请量位居全球首位
  • 银川市市长信箱被指已读乱回,官方回应
  • 艺术与医学的对话,瑞金医院办了一个展览
  • “世纪火种”嘉年华启动,69家单位加入阅读“朋友圈”