Spring Boot中@Autowired注解无法生效的问题排查求助
Spring Boot @Autowired注解不生效问题排查方案
- 检查启动类扫描范围
确认启动类上的@SpringBootApplication默认扫描的同包及子包是否覆盖了你的Service、Repository类所在目录。如果组件类放在启动类包的上层,需要手动添加@ComponentScan(basePackages = "你的组件根包路径")指定扫描范围。如果使用MyBatis/MyBatis-Plus,必须在启动类添加@MapperScan("你的Mapper接口所在包路径"),否则持久层接口不会被实例化为Spring Bean,无法注入。 - 检查组件注解是否正确
Service实现类必须添加@Service注解,Spring Data JPA的Repository接口需要继承JpaRepository并添加@Repository注解,MyBatis的Mapper接口需要添加@Mapper注解或者通过@MapperScan统一扫描。没有对应注解的类不会被Spring容器识别,自然无法完成注入。 - 检查类的实例化方式
如果你在代码中手动new了需要依赖注入的类(比如Service、Controller实例),手动实例化的对象不受Spring容器管理,内部的@Autowired字段不会被自动赋值,会出现空指针或找不到Bean的错误。 - 检查依赖是否完整
确认pom.xml中引入了对应场景的starter依赖,比如Spring Web starter、持久层对应的MyBatis/MyBatis-Plus starter或Spring Data JPA starter,缺少对应依赖会导致组件无法被自动代理注册到容器中。 - 检查注入类型匹配规则
如果你@Autowired注入的是接口,要确认容器中只有一个该接口的实现类,否则需要搭配@Qualifier("实现类Bean名称")指定要注入的实例,否则会出现类型匹配冲突,导致注入失败。
内容的提问来源于stack exchange,提问作者Clemens Titou
相关产品推荐
相关产品推荐

