UnsatisfiedDependencyException 和 NoSuchBeanDefinitionException 本质是 Spring 容器找不到目标 Bean;需先看日志提示的类名和依赖路径,再检查三点:是否被扫描到、是否加了正确注解、依赖类型是否存在且唯一。

依赖注入失败的常见报错及定位方法
Spring Boot 启动时报 UnsatisfiedDependencyException 或 NoSuchBeanDefinitionException,本质是 Spring 容器找不到目标 Bean。先看日志中提示的类名和依赖路径(如 “required a bean of type ‘XxxService’ that could not be found”),再顺藤摸瓜检查三点:该类是否被 Spring 扫描到、是否加了正确的组件注解、依赖类型是否存在且唯一。
检查组件是否被正确扫描和注册
确保目标类在 @SpringBootApplication 注解所在包或其子包下;否则需显式配置 @ComponentScan。确认类上有有效注解:@Component、@Service、@Repository、@Controller 或 @Configuration。注意:普通 Java 类即使有 @Autowired 字段,自身不加注解也不会被注册为 Bean。
- 检查类是否被 @ConditionalOnMissingBean 等条件注解排除
- 确认没有拼错类名或包名(尤其大小写、中文字符、隐藏空格)
- 若使用 Lombok,确保 @RequiredArgsConstructor 或 @AllArgsConstructor 未意外屏蔽默认构造函数导致代理失败
排查依赖类型不匹配或冲突
Spring 按类型(byType)注入,默认要求容器中该类型 Bean 唯一。若存在多个同类型 Bean,会抛出 NoUniqueBeanDefinitionException。解决方式包括:
- 用 @Qualifier("beanName") 明确指定 Bean 名称
- 用 @Primary 标记首选 Bean
- 检查是否因多模块/多 Starter 引入重复依赖(如两个不同版本的 MyBatis AutoConfigure)
- 留意接口与实现类关系——注入接口时,确保其实现类已注册;直接注入实现类则需确保其实例化成功且无循环依赖
验证配置类与 Bean 生命周期关键点
@Configuration 类必须是非 final 的(避免 CGLIB 代理失败),内部 @Bean 方法不能是 private 或 static(除非用 Spring Boot 2.6+ 的 @Bean 支持静态方法)。若 Bean 初始化失败(如构造器抛异常、@PostConstruct 报错),会导致整个注入链中断。可在启动时加参数 --debug 查看自动配置报告,或启用 logging.level.org.springframework.beans=DEBUG 观察 Bean 创建过程。











