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

如何在Service类中通过@Autowired注入使用JpaRepository

Spring Boot Service层JPA Repository注入为null问题排查

前置排查说明

已查阅多篇相关技术问答与教程,包含平台内《Spring boot MVC - Unable to Autowire Repository in the service class》《Why can't @Autowired a JPA repository - Spring boot + JPA》《JpaRepository getting Null at service class》三篇相关帖子,以及@Autowired字段注入为null的相关教程,尝试其中所有解决方案均未生效。

现有代码结构

Service接口定义

@Service
public interface DayTradeService {
    public List<DayTrade> getDayTrades(List<NotaDeCorretagem> corretagens);
}

Service实现类定义

public class DayTradeServiceImpl implements DayTradeService {
    
    @Autowired
    private DayTradeRepository dayTradeRepository;
    
    @Override
    public List<DayTrade> getDayTrades(List<NotaDeCorretagem> corretagens) {
        // 业务逻辑代码,部分逻辑需要调用dayTradeRepository方法
    }
}

Repository层定义

@Repository
public interface DayTradeRepository extends JpaRepository<DayTrade, Integer> {}

异常表现

  • 标注@Controller注解的DayTradeController中,通过@Autowired注入的dayTradeRepository可以正常调用
  • Service类中注入的dayTradeRepository始终为null,调用方法时抛出如下错误:
Cannot invoke "meca.irpf.Repositories.DayTradeRepository.getDayTrades()" because "this.dayTradeRepository" is null

问题根因与修复方案

注意:Spring的@Service等构造型注解需要标注在实现类上,而非接口上

  • 将@Service注解从DayTradeService接口移除,添加到DayTradeServiceImpl实现类上,确保Spring容器能扫描到该Service实现类并生成托管Bean
  • Controller层禁止手动通过new DayTradeServiceImpl()的方式创建Service实例,必须通过@Autowired注入DayTradeService类型的托管Bean使用

手动new创建的对象脱离Spring容器管理,对象内部标记@Autowired的属性不会完成注入,这是本次依赖为null的核心原因

完成以上修正后,Service层的Repository注入恢复正常,问题解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:24:31