基于 bean id 和主要属性覆盖 spring bean

Overriding spring bean based on bean id and primary attribute

假设我在配置文件中有一个像这样的 spring bean 'A':

<bean id="foo" class="bar" />

然后,我有另一个配置文件 'B'(在 'A' 之后加载)并且在其中,我有:

<bean id="foo" class="baz" />

我读到 'B' 中的 bean(class baz)会覆盖 'A' 中的 bean。但这是脆弱的。但是,如果我在 'B' 中包含 bean 的 primary="true" 怎么办 - 这是否意味着 'B' 中的 bean 将始终覆盖 'A' 中的 bean,因为它已定义作为 id="foo"?

的主要 bean

由于您正在加载具有相同 ID 的 bean,因此该应用程序将只有一个 bean(以最后加载的为准)。使用 "primary" 不会有任何效果。

当您加载多个具有相同类型的 bean 并使用类型(而不是 ID)搜索 bean 时,主标记会发挥作用。在这种情况下,如果您指定一个特定的 bean 作为主 bean,那么将返回该 bean。如果您没有将任何 bean 指定为主要 bean,则会收到一条错误消息,指出已找到多个具有相同类型的 bean(即使这些 bean 是使用单独的上下文文件加载的)。