Spring自定义Starter未加@EnableJpaRepositories无法扫描Repository问题咨询
自定义Spring Starter JPA Repository未被自动扫描的根因说明
- Spring Boot 默认的组件扫描规则仅对业务项目中带
@SpringBootApplication注解的启动类所在包及其子包生效,你开发的自定义Starter属于第三方依赖,不会被业务项目默认纳入扫描范围。 - JPA Repository 接口的扫描逻辑独立于普通
@Component类的扫描,必须通过@EnableJpaRepositories注解触发,和@Repository注解没有关系:@Repository仅用来标识DAO层组件,对JPA接口的扫描无任何效果。 - 你Starter里的
AutoConfiguration是通过Spring Boot自动装配机制加载的,本身不会触发默认的子包扫描逻辑,因此就算Repository在配置类的下级包,没有显式开启JPA扫描的话也不会被识别。
优化方案(无需硬编码全量包路径)
如果你不想在注解里写死全包名字符串,可以用basePackageClasses属性关联具体的Repository类,降低代码耦合:
@RequiredArgsConstructor @Configuration @EnableJpaRepositories(basePackageClasses = UserRepository.class) @Import({BeanConfig.class}) public class AutoConfiguration { }
不存在完全省略@EnableJpaRepositories注解的方案,因为Spring Boot默认不会主动扫描第三方依赖中的JPA Repository接口,必须显式声明扫描范围。
内容的提问来源于stack exchange,提问作者Davis
相关产品推荐
相关产品推荐

