@Primary与@Qualifier注释@Autowired之间的差异

2022-09-01 11:28:49

因此,如果我理解正确,两者都是确定在有多个候选者时自动连接哪种bean的方法。那么究竟有什么区别呢?


答案 1

将@Primary读作“默认值”。

如果一个 Bean 没有任何 ,并且存在该类型的多个 Bean,则将选择标记的候选 Bean,即当没有其他可用信息时,即当缺少时,它是默认选择。@Autowired@Qualifier@Primary@Qualifier

一个好的用例是,最初你只有一个这种类型的bean,所以没有使用任何代码。然后,当您添加另一个豆子时,您还会同时添加旧豆和新豆,因此任何人都可以选择它想要的豆子。通过添加旧的原始bean,您不必添加到所有现有的.可以这么说,他们是“祖父”进来的。@Qualifier@Qualifier@Autowired@Primary@Qualifier@Autowired

@Primary如果例如95%的人想要一个特定的豆子,也是好的。这样,只有想要其他bean的才需要指定。这样,您就拥有了所有自动连接所需的主bean,并且仅用于请求“备用”Bean。@Autowired@Autowired@Qualifier@Qualifier


答案 2

@Qualifier应与 always 结合使用。这将指示在应用程序上下文中存在具有相同类型的多个Bean的情况下需要自动连接的Bean名称。(因此弹簧可以按名称自动布线。@Autowired

@Primary应与 / 结合使用,这表示当存在相同类型的多个豆子时,应给予哪个豆更高的优先级。@Bean@Autowired

您可以使用的经典用例之一是,当框架(示例spring-data)需要某种类型的Bean(示例EntityManager)但是您有多个数据源并且您已经配置了多个实体管理器时。在这种情况下,不太有帮助。@Primary@Qualifier


推荐