解决SpringBoot3.X中starter配置自动注入失效问题
在自定义 starter 项目时,如果组件无法被 @ComponentScan 扫描并且想自动注册到 IOC 中,在springboot2.7之前 我们会采用 spring,factories 方式,但在3.0 之后已经被彻底移除
spring.factories介绍
spring.factories 是SpringBoot提供的SPI机制,底层实现是基于SpringFactoriesLoader检索ClassLoader中所有jar(包括ClassPath
下的所有模块)引入的META-INF/spring.factories文件,基于文件中的接口(或者注解)加载对应的实现类并且注册到IOC容器。这种方式对于@ComponentScan不能扫描到的并且想自动注册到IOC容器的使用场景十分合适,基本上绝大多数第三方组件甚至部分spring-projects中编写的组件都是使用这种方案。
# Initializers
org.springframework.context.ApplicationContextInitializer=\
org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,\
org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener
# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.autoconfigure.BackgroundPreinitializer
# Environment Post Processors
org.springframework.boot.env.EnvironmentPostProcessor=\
org.springframework.boot.autoconfigure.integration.IntegrationPropertiesEnvironmentPostProcessor
# Auto Configuration Import Listeners
org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\
org.springframework.boot.autoconfigure.condition.ConditionEvaluationReportAutoConfigurationImportListener
# Auto Configuration Import Filters
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\
org.springframework.boot.autoconfigure.condition.OnBeanCondition,\
org.springframework.boot.autoconfigure.condition.OnClassCondition,\
org.springframework.boot.autoconfigure.condition.OnWebApplicationCondition
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.baomidou.mybatisplus.autoconfigure.MybatisPlusLanguageDriverAutoConfiguration,\
com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration
通用格式是:接口(或者注解)全类名=\接口实现类(或者使用了该注解的类)全类名-1,\接口实现类(或者使用了该注解的类)全类名-2,...接口实现类(或者使用了该注解的类)全类名-n。spring.factories中最常用的注解是org.springframework.boot.autoconfigure.EnableAutoConfiguration,通过配置此注解对应的实现了,底层会由AutoConfigurationImportSelector对响应的目标类进行加载和自动注册。通过阅读 Spring Boot 3.0 Migration Guide 得知,spring.factories功能在Spring Boot 2.7已经废弃,并且会在Spring Boot 3.0移除。
spring.factories被移除后的替代方案
在类路径下创建META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,文件的内容是:每个实现类的全类名单独一行。例如对于使用了(低版本还没适配Spring Boot 3.0)mybatis-plus、dynamic-datasource 组件的场景,可以在项目某个模块的resources目录下建立META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,输入以下内容:
com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration
com.baomidou.mybatisplus.autoconfigure.MybatisPlusLanguageDriverAutoConfiguration
com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration
解决SpringBoot3.X中starter配置自动注入失效问题的更多相关文章
- spring中bean配置和注入场景分析
bean与spring容器的关系 Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载.实例化Bean,并 ...
- SpringBoot中mybatis配置自动转换驼峰标识没有生效
mybatis提供了一个配置: #开启驼峰命名转换 mybatis.configuration.map-underscore-to-camel-case=true 使用该配置可以让mybatis自动将 ...
- [已解决] 日常开发中禁用Tomcat自动重启
最近做了一些Java Web开发,发现每次修改完java或者其他文件后tomcat都会重新加载一次项目,很耽误事,如何禁用Tomcat自动重启呢, 找到server.xml中的这一行,把其中的 rel ...
- Spring中继承配置的注入方法
(1)两个java类.一个父类一个字类 package com.lc.inherit; /* * 这里是父类 */ public class Student { protected String na ...
- [杂谈]杂谈章3 JAVA中如何用自动注入
PART1 加配置文件 创建自动加载bean的配置文件 <beans xmlns="http://www.springframework.org/schema/beans" ...
- Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案
点关注,不迷路:持续更新Java架构相关技术及资讯热文!!! 相信使用Mybaits的小伙伴们一定会经常编写类似如下的代码: 可以看到 userMapper 下有个红色警告.虽然代码本身并没有问题,能 ...
- 解决VirtualBox虚拟机中PM3总是自动断开的问题
一.问题 运行环境: 虚拟机软件:VirtualBox 6.0.8 r130520 宿主机:Win10 1803 客户机:Ubuntu 19.04 问题: 当插入PM3并连入虚拟机后,PM3过几十秒会 ...
- 解决shell脚本中 telnet ap自动输入用户名和密码以及回车符
#!/bin/bash function change_ap { ( s=`stty -g`; str=$"\n" sstr=$(echo -e $str) stty raw -e ...
- 解决windows 服务中定时器timer 定时偶尔失效 问题
最近做个windows 服务,功能是:定时执行一个任务:自动登录到一个网站后,点击相关网面上的按钮button. 在处理的过程中发现定时器老是不定时的失效,失效时间没有规律. 由于刚开始处于测试阶段, ...
- Spring的三种注入方式(Setter、构造函数和自动注入)
一.Setter注入 这里我是希望在Student.java中调用Course.java中的内容. public class Course { public String name = "数 ...
随机推荐
- JavaScript如何解决单线程缺陷——webWorker
解决JavaScript单线程问题--webWorkers 参考文档 使用 Web Workers - Web API 接口参考 | MDN (mozilla.org) MDN的介绍为: Web Wo ...
- 某表格常用api
这是一个神奇的网站,可作为免费的数据存储平台,已白嫖多年 通过调用接口可以方便的实现增删改查.修改www前缀为vip,还能嫖vip服务器 我常常用来写入程序的日志记录,记录/更新一些关键key 不需要 ...
- CoaXpress downlink数据解析方法
什么是downlink数据 downlink指的是相机传输到host采集卡的高速链路,其中包含了如下类型的数据: 1.Stream Data 2.Trigger Ack, Trigger: 3.Ack ...
- 【PAT】1001 害死人不偿命的(3n+1)猜想(动态更新)
卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 ( 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 年的世界 ...
- Dlang 并行化
Dlang 并行化 好难受,dlang 生态太差,没办法,学了半天才明白. 我尽量以精炼的语言解释. 采用 定义,例子(代码),解释 的步骤讲解. 所以你可能看到很多代码,一点解释-- 我会省略一些 ...
- Codeforces Round #877 (Div. 2) A-E
A 代码 #include <bits/stdc++.h> using namespace std; using ll = long long; bool solve() { int n; ...
- 技术选型|K歌App中的实时合唱如何进行选型
摘要 在线K歌软件的开发有许多技术难点,需考虑到音频录制和处理.实时音频传输和同步.音频压缩和解压缩.设备兼容性问题等技术难点外,此外,开发者还应关注音乐版权问题,确保开发的应用合规合法. 前言 前面 ...
- 论文日记一:AlexNet
1.导读 ALexNet在2012图像识别竞赛中ILSVRC大放异彩,直接将错误了降低了近10个百分点. 论文<ImageNet Classification with Deep Convolu ...
- 【Mybatis】动态SQL
目录 动态SQL if语句 动态SQL if+where语句 动态SQL if+set语句 动态SQL choose(when,otherwise)语句 动态SQL trim语句 动态SQL SQL片 ...
- 筛选出N以内的素数
解题思路:1.素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数.(也就是只有 1 和它本身能整除)2.利用两个for循环来判断素数. 注意事项:1.注意for添加花括号.2.注意输 ...