ConditionalOnMissingBean over Primary?

时间:2018-03-27 22:23:04

标签: spring spring-boot

我在一些Spring库中注意到大多数bean都注明了@ConditionalOnMissingBean

与不使用任何条件并在主代码中使用@Primary相比,是否有任何优势,或者只是注释较少?

2 个答案:

答案 0 :(得分:4)

@Primary的定义(文档):

  

指示当多个时应优先考虑Bean   候选人有资格自动装配单值依赖项。如果   候选对象之间确实存在一个“主要” bean,它将是   自动接线的值。

@ConditionalOnMissingBean的定义(文档):

  

仅当指定的bean类和/或   名称尚未包含在bean工厂中。

简而言之:

@Primary->强制执行,

@ConditionalOnMissingBean->后退

答案 1 :(得分:1)

您可以将@ConditionalOnMissingBean视为后备。如果没有可以在上下文路径中找到的其他bean,则将注册此bean。

@Primary bean主要处理优先级。带有注释的bean将首先注册 ,这通常意味着它将是将使用的bean。

使用条件bean取决于您正在做什么。如果您有多个服务用于不同目的且不应同时连接,则条件接线非常适合该场景。如果您只有或者只需要一个bean,或者您从上游库中获取bean(如dataSource),那么指定要连接的bean是有用的应该考虑的那个。