跨模块引用Repository触发UnsatisfiedDependencyException问题排查
问题排查与解决方案
针对你的Repository注入失败问题,可从以下几个方向排查:
1. 确认Spring Data JDBC依赖是否引入
Spring Data JDBC的Repository代理类生成依赖对应的starter包,如果项目中未引入,Spring无法识别并创建Repository Bean。
- Gradle依赖配置:
implementation("org.springframework.boot:spring-boot-starter-data-jdbc")
- Maven依赖配置:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency>
2. 修正Repository接口的定义
单纯继承Repository<MyType, Int>不足以让Spring Data JDBC自动生成代理Bean,需做以下调整之一:
- 改为继承
CrudRepository<MyType, Int>(包含基础CRUD方法,符合你的需求场景):
interface MyRepository: CrudRepository<MyType, Int> { @Query("select * from my_type", nativeQuery=true) fun findAll(): List<MyType> }
- 或者在接口上添加
@RepositoryDefinition注解,显式指定实体类和ID类型:
import org.springframework.data.repository.RepositoryDefinition @RepositoryDefinition(domainClass = MyType::class, idClass = Int::class) interface MyRepository: Repository<MyType, Int> { @Query("select * from my_type", nativeQuery=true) fun findAll(): List<MyType> }
3. 明确@EnableJdbcRepositories的扫描范围
将@EnableJdbcRepositories的basePackages调整为Repository所在的具体子包,避免扫描范围歧义:
@EnableJdbcRepositories(basePackages = ["com.myapp.engine.repository"])
4. 检查MyService中的包名引用
错误提示中出现了com.webapp.engine.repository.MyRepository的包名(实际你的包是com.myapp),检查MyService中的import语句是否写错,确保注入的是正确的com.myapp.engine.repository.MyRepository类型。
内容的提问来源于stack exchange,提问作者Claudio Mezzasalma
相关产品推荐
相关产品推荐

