You need to enable JavaScript to run this app. Spring Boot 跨类调用时@Autowired 注入为null的问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 跨类调用时@Autowired 注入为null的问题求助

故障核心原因

你在SomeRestClass中手动通过new Check()创建的实例,完全不受Spring容器管控。
Spring的@Autowired自动装配逻辑,只会对容器托管的Bean生效;手动new出来的对象走不到Spring的字段注入流程,因此Check类里的sfr字段没有被赋值,才会出现null。

为何直接调用REST接口时功能正常?

当你直接访问http://localhost:8080/api/checker时,Spring MVC会从容器中取出已经完成初始化、自动装配的托管版Check Bean来处理请求,这个Bean内部的sfr早已被注入完成,因此运行没有问题。

正确的代码改造方案

不需要手动实例化Check,直接将Check作为依赖注入到SomeRestClass即可:

@RestController
public class SomeRestClass{
    // 直接注入Spring托管的Check实例,删除手动new的逻辑
    @Autowired
    Check c;

    public void letsSave(){
        c.checkSettlementFinance("99999");
    }
}
常见踩坑提醒
  • 所有需要使用Spring注解(包括@Autowired、@Transactional等依赖容器能力的注解)的类,必须由Spring容器托管,不能手动new对象
  • 只要遇到注入字段为null的问题,第一时间排查当前使用的实例是不是手动new出来的、没有被Spring扫描托管的对象

内容的提问来源于stack exchange,提问作者Saravana Jagan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 11:54:03