1

Spring Boot 的文档中明确指出必须通过spring.factories文件指定自动配置:

自动配置只能以这种方式加载。确保它们是在特定的包空间中定义的,并且它们永远不是组件扫描的目标。

我确实尝试@Component在我的自动配置类上添加一个,并确保它会被组件扫描拾取。它似乎工作。

虽然我确实认为这是不好的做法,因为组件扫描不太可能在现实世界的场景中真正找到它,但我想知道为什么文档对此有如此强烈的感觉。是否还有其他我没有预料到的危险,如果有,是哪一个?

编辑:在https://youtu.be/jDchAEHIht0?t=734 Stéphane 和 Brian 解释说有两个阶段,一个称为“用户配置阶段”,另一个称为“自动配置阶段”。按照这种想法,@ComponentScan在自动配置类上使用会将其移至“用户配置阶段”,这基本上会破坏自动配置的语义。

但是,我无法在我的实验中打破它。只要我保留我的@Conditional注释,它似乎就可以按预期工作......

4

1 回答 1

4

它似乎工作。

正如您可能怀疑的那样,该注释出现在文档中是有充分理由的。自动配置的全部意义在于,一旦用户配置被解析,它们就会被处理,原因很简单,顺序很重要。

如果您的应用程序的配置类产生了一堆 bean,并且您想确保如果用户表达了意见,则不会创建自动配置中的某个 bean,那么您需要确保该自动配置在用户配置后处理。您分享的视频更详细地描述了这一点,我建议您观看完整的部分。

是否还有其他我没有预料到的危险,如果有,是哪一个?

希望上面的解释和您自己的编辑告诉您。自动配置不是用户配置。在组件扫描中声明它们是用户配置的教科书。

于 2020-09-13T08:47:20.187 回答