@SpringBootApplication是否会扫描test文件夹下的配置类?
问题1:启动正式应用时,是否会加载test目录下的@Configuration配置类?
不会。
Maven、Gradle等标准Java项目构建工具默认会做类路径隔离:
src/main/java下的代码属于正式应用编译范围,会被打包到最终的可执行jar/war中,加入正式启动的类路径src/test/java下的代码仅属于测试编译范围,不会被打包到正式应用产物中。正式启动时类路径里根本不存在test下的类,哪怕主类的包扫描范围再大也不可能扫描到,完全不会生效。
问题2:运行测试且@SpringBootTest可扫描到test下配置类的场景下,是否会被@SpringBootApplication自动配置?
默认会。
运行测试时,构建工具会同时把src/main/java和src/test/java的编译结果加入类路径。如果你没有给@SpringBootTest自定义scanBasePackages、classes等专属扫描规则,默认会复用主类@SpringBootApplication的扫描逻辑:@SpringBootApplication自带的@ComponentScan会扫描自身所在包以及所有子包下的所有符合注解规则的类,不管类来自main目录还是test目录,只要满足:
- 类路径中存在该配置类
- 配置类的包路径在
@SpringBootApplication的扫描范围内 - 配置类没有加
@Profile、@Conditional之类的生效限定注解
就会被自动扫描加载到Spring测试上下文中生效。
内容的提问来源于stack exchange,提问作者J.J. Beam
相关产品推荐
相关产品推荐

