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

Spring自动注入Repository到Service时抛出NoSuchBeanDefinitionException

解决Spring中Repository无法注入Service的NoSuchBeanDefinitionException问题

最近我遇到了一个头疼的Spring依赖注入问题——尝试把MktPlace2PedidoRepository自动注入到被Controller调用的MktPlace2PedidoService中时,一直报找不到Bean的错误,但其他用同样方式注入的Repository却完全正常运行。

报错信息

Error creating bean with name 'mktPlace2PedidoService' defined in VFS resource ["/home/davidgarcia/wildfly-11.0.0.Final/standalone/deployments/issuer.war/WEB-INF/classes/br/com/sinergico/service/mktplace2/MktPlace2PedidoService.class"]: Unsatisfied dependency expressed through constructor argument with index 0 of type [br.com.sinergico.repository.mktplace2.MktPlace2PedidoRepository]: No qualifying bean of type [br.com.sinergico.repository.mktplace2.MktPlace2PedidoRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [br.com.sinergico.repository.mktplace2.MktPlace2PedidoRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

相关代码片段

  1. Service层代码(构造方法注入Repository)
package br.com.sinergico.service.mktplace2; 

@Service 
public class MktPlace2PedidoService extends GenericService<MktPlace2Pedido, Long> { 
    private MktPlace2PedidoRepository repository; 

    @Autowired 
    public MktPlace2PedidoService(MktPlace2PedidoRepository repository) { 
        super(repository); 
        this.repository = repository; 
    } 

    // 其他业务方法
}
  1. Repository接口代码
package br.com.sinergico.repository.mktplace2; 

public interface MktPlace2PedidoRepository extends JpaRepository<MktPlace2Pedido, Long> { 
    // 自定义查询方法
}
  1. Entity实体类代码
package br.com.entity.mktplace2; 

@Entity 
@Table(name="pedido", schema = "marketplace") 
@SequenceGenerator(name="hibernate_sequence", sequenceName="marketplace.hibernate_sequence",initialValue=1, allocationSize=1) 
public class MktPlace2Pedido implements Serializable{ 
    private static final long serialVersionUID = 45381343130121532L; 

    @Id 
    @Column(name="id") 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "hibernate_sequence") 
    private Long id; 

    // 其他字段及getter/setter
}

排查过程

一开始我以为是Repository没被Spring识别,特意给MktPlace2PedidoRepository加了@Repository注解,但问题依然存在。对比其他正常工作的Repository,代码结构和注入方式完全一致,这让我困惑了好久。

解决方法

最后才发现问题出在Spring的JPA配置上——@EnableJpaRepositories注解的basePackages属性里漏掉了br.com.sinergico.repository.mktplace2这个包路径!Spring没办法扫描到这个包下的Repository接口,自然无法生成对应的Bean实例。修改后的配置如下:

@EnableJpaRepositories(basePackages = { 
    // 其他已配置的包路径
    ,"br.com.sinergico.repository.mktplace2"
    // 其他已配置的包路径
})

加上这个包路径后,Spring就能正常扫描并创建MktPlace2PedidoRepository的Bean,依赖注入也恢复正常了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:30:26