You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Repository空指针异常:Spring Boot读取SQL Server数据报错

排查Spring Repository空指针异常的解决方案

我来帮你定位这个问题——你遇到的空指针异常,核心原因是依赖注入的时机不对,具体来说是在Spring完成依赖注入之前就调用了Repository的方法。

问题根源

在Spring的生命周期里,当你用@Autowired标注字段时,Spring会先执行类的构造方法创建实例,之后才会把依赖注入到对应的字段中。你的CustomersView在构造方法里直接调用customerRepository.findAll(),这时候customerRepository还没被Spring注入,自然是null,触发空指针异常。

两种有效解决方案

方案1:使用构造器注入(推荐)

这是Spring官方推荐的依赖注入方式,不仅能避免空指针,还让依赖关系更清晰,方便单元测试。修改CustomersView代码如下:

@Tag("customers-view")
@HtmlImport("src/views/customers/customers-view.html")
@Route(value = ApplicationConst.PAGE_CUSTOMERS, layout = MainView.class)
@PageTitle(ApplicationConst.TITLE_CUSTOMERS)
public class CustomersView extends PolymerTemplate<TemplateModel> {
    private final CustomerRepository customerRepository;

    // 通过构造器注入依赖,Spring会在创建实例时直接传入Repository
    @Autowired
    public CustomersView(CustomerRepository customerRepository) {
        this.customerRepository = customerRepository;
        // 此时Repository已经被注入,可以安全调用方法
        customerRepository.findAll();
    }
}

方案2:使用@PostConstruct注解

如果更习惯字段注入,可以用@PostConstruct标注初始化方法,这个方法会在所有依赖注入完成后自动执行:

@Tag("customers-view")
@HtmlImport("src/views/customers/customers-view.html")
@Route(value = ApplicationConst.PAGE_CUSTOMERS, layout = MainView.class)
@PageTitle(ApplicationConst.TITLE_CUSTOMERS)
public class CustomersView extends PolymerTemplate<TemplateModel> {
    @Autowired
    private CustomerRepository customerRepository;

    public CustomersView() {
        // 构造方法里不要调用Repository的方法
    }

    // 依赖注入完成后自动执行的初始化方法
    @PostConstruct
    public void initData() {
        customerRepository.findAll();
    }
}

额外确认点

从你的Application类配置来看,@EnableJpaRepositories(basePackageClasses = CustomerRepository.class)已经正确指定了Repository的扫描范围,只要CustomerRepository和Application在同一个包或子包下,Spring就能正确实例化它,这部分应该没问题。

内容的提问来源于stack exchange,提问作者Birger Huysmans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:45:26