正如文档所述, Spring Boot 自动配置应该依赖@Import
而不是使用@ComponentScan
.
我只是想知道如果他们导入一个带有注释的配置类是否可以@ComponentScan
。更具体地说,我们的公共库被分成几个模块,每个模块都提供一些必须自动注册为 bean 的类。为了实现这一点,我们在每个模块的根目录上创建一个配置类,如下所示,扫描其各自的内容:
@ComponentScan
@Configuration
class SomeConfiguration {
}
然后,在一个单独的自动配置模块上,我们创建一个自动配置,以该配置类的存在为条件,如果它存在于类路径中,则导入它。
@ConditionalOnClass(SomeConfiguration.class)
@Import(SomeConfiguration.class)
@Configuration(proxyBeanMethods=false)
class SomeAutoConfiguration {
@ConditionalOnMissingBean
@Bean
SomeComponent someComponentThatCanBeOverridenByApp() {
return new SomeComponent();
}
}
到目前为止,我们已经从这些自动配置中提供了几个 bean,带有注释@ConditionalOnMissingBean
并且一切似乎都工作正常,但我一直想知道这是否是正确的做法。
我阅读了文档并观看了有关该主题的 Brian Clozel 和 Stéphane Nicoll 视频,但没有人解决这个特别的疑问。