Spring Boot对Spring数据配置的支持通常是org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport
,这个类使用以下代码来确定要扫描存储库的包:
AutoConfigurationPackages.get(this.beanFactory)
因此,基本上Spring Data with Spring Boot只扫描包含@EnableAutoConfiguration
或@ImportAutoConfiguration
的包,但不考虑@ComponentScan
,这是正确的吗?
答案 0 :(得分:0)
@ComponentScan
注释是Spring Framework的核心功能,用于搜索使用@Component
注释的类。由于Spring Data存储库是接口(而不是注释),因此@ComponentScan
注释不会接受它们。
如果您在Spring Boot之外使用Spring Data,则可以使用设置了@EnableJpaRepositories
属性的basePackages
扫描Spring Data存储库。
说到Spring Boot,通常不需要使用@ComponentScan
或@EnableJpaRepositories
。如果您structure your code as suggested,将会选择组件和存储库。
回到关于AbstractRepositoryConfigurationSourceSupport
的原始问题。如果您查看@SpringBootApplication
的来源,您会看到@ComponentScan
(查找@Components
)和@AutoConfigurationPackage
(通过{{1}进行注释}})。 @EnableAutoConfiguration
将@AutoConfigurationPackage
设置为后来检索的值。
如果要覆盖Spring Data搜索存储库的软件包(例如在测试中),您需要使用AutoConfigurationPackages
来完全覆盖自动配置。我通常不会这样做,而是使用@EnableJpaRepositories
并选择我的主要配置。