[SpringIOC]NoSuchBeanDefinitionException

一.异常原因

  • 组件获取失败(NoSuchBeanDefinitionException):

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

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

2.0.核心原因

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

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

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

2.2. 配置 RANDOM_PORT 或 DEFINED_PORT 为什么就不报错了?

当你显式设置:

java

运行

复制代码
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
  • Spring Boot 会启动一个真实的、内嵌的 Web 服务器(Tomcat),并监听一个随机端口。
  • 此时,测试上下文检测到真实的 Web 环境,就会自动创建并配置好 TestRestTemplate 实例,并且它已经知道服务器的端口,你可以直接使用相对路径(如 /api/user)来发送请求。
相关推荐
雪芽蓝域zzs19 分钟前
第 1 章:IDEA 创建 SpringBoot3.5.16 Maven 项目
java·maven·intellij-idea
golang学习记27 分钟前
IDEA 开始换芯,发布全新AI版终端
java·人工智能·intellij-idea
vipxieliang36 分钟前
ValidX 正则表达式预编译优化:Pattern 复用策略
java·spring boot·后端
Wang's Blog1 小时前
Java 项目实战:交友项目 - FastDFS 工作原理
java·大数据·交友
Wang's Blog1 小时前
Java 项目实战:交友项目 - 保存访客记录
java·开发语言·交友
liangbo71 小时前
Spring系列01:IoC 与 DI 到底解决了什么
java·spring
江湖中的阿龙1 小时前
Oracle 紧急安全警报:Java 9.1 分漏洞 CVE-2026-91403,撤销对 eMudhra 风险证书的信任
java·安全·oracle
挖掘狂人1 小时前
缓存和数据库的一致性,别停在 “延时双删”
java·后端·程序员
codigger1 小时前
缓存和数据库的一致性,别停在 “延时双删”
java·后端·程序员·后端开发
Java后端的Ai之路1 小时前
Java并发编程07-等待通知机制优化循环等待
java·数据库·python