为什么AutoConfigurationPackages不考虑@ComponentScan?

时间:2017-07-27 07:04:05

标签: spring-boot

Spring Boot对Spring数据配置的支持通常是org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport,这个类使用以下代码来确定要扫描存储库的包:

AutoConfigurationPackages.get(this.beanFactory)

因此,基本上Spring Data with Spring Boot只扫描包含@EnableAutoConfiguration@ImportAutoConfiguration的包,但不考虑@ComponentScan,这是正确的吗?

1 个答案:

答案 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并选择我的主要配置。