[SpringIOC]NoSuchBeanDefinitionException

一.异常原因

  • 组件获取失败(NoSuchBeanDefinitionException):

    ① 组件未加注解;② 组件不在扫描包范围内;③ 组件名称 / 类型写错;

二.TestRestTemplate在未配置Web环境的时候,自动装配会报错

2.0.核心原因

TestRestTemplate 只有在真实的 Web 环境下才会被 Spring 测试上下文自动创建

2.1. 为什么不配置 webEnvironment 会报错?

  • Spring Boot 测试默认的 webEnvironmentWebEnvironment.MOCK,它只是模拟了一个 Servlet 环境,并没有启动一个真实的 Web 服务器(Tomcat)。
  • 在这种模拟环境下,Spring 测试上下文不会自动提供 TestRestTemplate 这个 Bean,因为它是用来和真实服务器交互的。
  • 当你尝试用 @Autowired 注入一个不存在的 Bean 时,就会抛出 NoSuchBeanDefinitionException

2.2. 配置 RANDOM_PORTDEFINED_PORT 为什么就不报错了?

当你显式设置:

java

运行

复制代码
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
  • Spring Boot 会启动一个真实的、内嵌的 Web 服务器(Tomcat),并监听一个随机端口。
  • 此时,测试上下文检测到真实的 Web 环境,就会自动创建并配置好 TestRestTemplate 实例,并且它已经知道服务器的端口,你可以直接使用相对路径(如 /api/user)来发送请求。
相关推荐
追随者永远是胜利者1 小时前
(LeetCode-Hot100)20. 有效的括号
java·算法·leetcode·职场和发展·go
前路不黑暗@2 小时前
Java项目:Java脚手架项目的文件服务(八)
java·开发语言·spring boot·学习·spring cloud·docker·maven
毅炼2 小时前
Java 集合常见问题总结(3)
java·开发语言·后端
百锦再3 小时前
Java多线程编程全面解析:从原理到实战
java·开发语言·python·spring·kafka·tomcat·maven
Cosmoshhhyyy3 小时前
《Effective Java》解读第38条:用接口模拟可扩展的枚举
java·开发语言
wangbing11253 小时前
平台介绍-主数据系统-同步消息设计
java
小冷coding4 小时前
【Java】最新Java高并发高可用平台技术选型指南(思路+全栈路线)
java·开发语言
寻星探路4 小时前
【前端基础】HTML + CSS + JavaScript 快速入门(三):JS 与 jQuery 实战
java·前端·javascript·css·c++·ai·html
cyforkk5 小时前
Tomcat 类加载机制解析:为何依赖包必须放在 WEB-INF/lib 目录下
java