[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 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里1 天前
java中的继承和多态的区别
java
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕1 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码1 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖1 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时1 天前
01-06-A-JVM排查实战详解
java·jvm
vipxieliang1 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
ba_pi1 天前
mysql 查询所有表名并授权
java
ProcessOn官方账号1 天前
java函数式编程--入门基础
java·编程·函数式编程