[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)来发送请求。
相关推荐
科技块儿31 分钟前
多语言技术栈如何共用IP离线库?Java、Python、Go 的加载实践
java·python·tcp/ip
chools1 小时前
一篇文章带你搞懂Java“设计模式”! - - 超长文(涵盖23种)万字总结!【汇总篇】
java·开发语言·设计模式
良逍Ai出海1 小时前
OpenClaw 新手最该先搞懂的 2 套命令
android·java·数据库
6+h1 小时前
【Spring】深度剖析IoC
java·后端·spring
初次攀爬者1 小时前
Spring中Bean的生命周期
后端·spring
程序员JerrySUN1 小时前
别再把 HTTPS 和 OTA 看成两回事:一篇讲透 HTTPS 协议、安全通信机制与 Mender 升级加密链路的完整文章
android·java·开发语言·深度学习·流程图
郝学胜-神的一滴1 小时前
系统设计与面向对象设计:两大设计思想的深度剖析
java·前端·c++·ue5·软件工程
myloveasuka1 小时前
[Java]子类到底能继承父类中的哪些东西?继承中成员变量/方法访问特点---就近原则
java·开发语言
umeelove351 小时前
vscode配置django环境并创建django项目(全图文操作)
java
x-cmd1 小时前
[260307] x-cmd v0.8.6:新增 gpt-5.4 模型支持,sudo/os/hostname/cpu 等模块文档更新
java·数据库·gpt·sudo·x-cmd·googel