我在一些Spring库中注意到大多数bean都注明了@ConditionalOnMissingBean
。
与不使用任何条件并在主代码中使用@Primary
相比,是否有任何优势,或者只是注释较少?
答案 0 :(得分:4)
@Primary
的定义(文档):
指示当多个时应优先考虑Bean 候选人有资格自动装配单值依赖项。如果 候选对象之间确实存在一个“主要” bean,它将是 自动接线的值。
@ConditionalOnMissingBean
的定义(文档):
仅当指定的bean类和/或 名称尚未包含在bean工厂中。
简而言之:
@Primary
->强制执行,
@ConditionalOnMissingBean
->后退
答案 1 :(得分:1)
您可以将@ConditionalOnMissingBean
视为后备。如果没有可以在上下文路径中找到的其他bean,则将注册此bean。
@Primary
bean主要处理优先级。带有注释的bean将首先注册 ,这通常意味着它将是仅将使用的bean。
使用条件bean取决于您正在做什么。如果您有多个服务用于不同目的且不应同时连接,则条件接线非常适合该场景。如果您只有或者只需要一个bean,或者您从上游库中获取bean(如dataSource
),那么指定要连接的bean是有用的仅应该考虑的那个。