Spring:覆盖父bean

时间:2017-03-16 13:13:40

标签: java spring

是否可以覆盖/替换父抽象bean?

E.G: 第1个xml:

<bean id="inheritedTestBean" abstract="true" class="org.springframework.beans.TestBean">
</bean>

<bean id="inheritsWithDifferentClass" class="org.springframework.beans.DerivedTestBean" parent="inheritedTestBean">
</bean>

第二个xml

<bean id="inheritedTestBean2" abstract="true" class="org.springframework.beans.TestBean2">
</bean>
<alias name="inheritedTestBean2" alias="inheritedTestBean" />

TestBean2继承TestBean。

2 个答案:

答案 0 :(得分:1)

任何给定的Spring上下文对于任何给定的id或名称只能有一个bean。对于XML id属性,这由架构验证强制执行。在name属性的情况下,这由Spring的逻辑强制执行。

但是,如果上下文是由两个不同的XML描述符文件构造的,并且两个文件都使用了一个id,那么就会“覆盖”另一个文件。确切的行为取决于文件在上下文加载时的顺序。

尽管有可能,但不建议这样做。它容易出错并且很脆弱,如果你更改了一个而不是另一个的ID,你将无法获得Spring的帮助。

答案 1 :(得分:0)

即使你能做到这一点,也会非常困惑。有@Primary注释,你可以看一下。或者您可以查看spring配置文件,因此您有一个默认的bean实现,然后每个其他配置文件都有一个不同的抽象类实现。