ConditionalOnMissingBean over Primary?

pix*_*xel 0 spring spring-boot

我注意到在一些 spring 库中,大多数 bean 都用@ConditionalOnMissingBean.

与不使用任何条件并@Primary在主代码中使用相比有什么优势,或者只是减少注释的问题?

Bah*_*mir 6

@Primary(文档)的定义:

指示当多个候选者有资格自动装配单值依赖项时,应该优先考虑一个 bean。如果候选中恰好存在一个“主要”bean,它将是自动装配的值。

@ConditionalOnMissingBean(文档)的定义:

仅当指定的 bean 类和/或名称尚未包含在 bean 工厂中时才匹配的条件。

简而言之:

@Primary -> 强制执行,

@ConditionalOnMissingBean -> 回退