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

Spring @Autowired能否自动装配无实现类的接口?若可以,如何实现?

Spring @Autowired能否自动装配无实现类的接口?

答案是能,但仅限Spring框架提供了动态代理支持的特定接口,比如你示例里的Spring Data JPA Repository接口;普通自定义的无实现类接口直接用@Autowired会找不到对应Bean。

具体实现逻辑(以你的示例为例)

你的UserRepository继承了JpaRepository——这是Spring Data JPA提供的核心接口,Spring会通过以下步骤自动生成实现类并完成注入:

  • Spring容器启动时,会扫描项目中所有继承自Repository(或其子接口如JpaRepository)的接口
  • 框架会使用JDK动态代理(或CGLIB,视接口情况而定)在运行时动态生成该接口的代理类
  • 这个动态生成的代理类会被自动注册为Spring Bean,自带你定义的接口方法(包括JpaRepository原生的CRUD方法、自定义查询方法)的实现逻辑
  • 当你用@Autowired注入UserRepository时,Spring容器就能找到这个动态生成的Bean并完成注入

翻译后的示例代码

无实现类的Repository接口

public interface UserRepository extends JpaRepository<User, Integer> {
    
}

注入该接口的控制器类

@RestController
public class UserJpaResource {
    
    @Autowired
    private UserRepository service;
    // 后续业务代码
}

额外注意

如果是你自己定义的普通接口(没有继承Spring提供的特殊接口),又没有编写实现类,直接用@Autowired注入会抛出NoSuchBeanDefinitionException——因为Spring没有逻辑为这类接口自动生成实现类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:25:17