基于bean id和primary属性覆盖spring bean

时间:2018-01-10 10:05:41

标签: java spring javabeans

假设我在配置文件中有一个像这样的弹簧豆' A':

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

然后,我有另一个配置文件&#39; B&#39; (在&#39; A&#39;之后加载),在其中,我有:

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

我读过“B&B”中的豆子。 (使用类baz)将覆盖&#39; A&#39;中的bean。但这很脆弱。但是,如果我将primary="true"包含在&#39; B&#39; - 这是否意味着'B&#39; B&#39;总是会覆盖'A&#39; A&#39;因为它被定义为id="foo"的主要bean?

1 个答案:

答案 0 :(得分:4)

由于您正在加载具有相同ID的bean,因此该应用程序将只有一个bean(无论哪个加载了最后一个)。使用“主要”将没有任何效果。

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