[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)来发送请求。
相关推荐
二月夜8 小时前
剖析Java正则表达式回溯问题
java·正则表达式
xuhaoyu_cpp_java8 小时前
项目学习(三)分页查询
java·经验分享·笔记·学习
程序员二叉8 小时前
【Java】集合面试全套精讲|HashMap/ArrayList高频考点完整版
java·面试·哈希算法
cfm_29149 小时前
JVM GC垃圾回收初步了解
java·开发语言·jvm
心之伊始9 小时前
LangChain4j RAG 实战:Java 后端如何把本地文档接入 Embedding 检索链路
java·架构·源码分析·csdn
许彰午10 小时前
17_synchronized关键字深度解析
java·开发语言
Xzh042311 小时前
AI Agent 学习路线(Java 后端方向)
java·人工智能·学习
艾利克斯冰12 小时前
Java 设计模式-行为型模式(更新中)
java·开发语言·设计模式
倒霉蛋小马12 小时前
Java新特性:record关键字
java·开发语言
折哥的程序人生 · 物流技术专研12 小时前
《Java 100 天进阶之路》第95篇:消息队列基础(RocketMQ/Kafka)(2026版)
java·面试·kafka·rocketmq·java-rocketmq·求职招聘