2012-06-12 202 views
11

在Spring IOC中有两个对bean(具有相同名称和类)有效的定义?定义两次具有相同名称的同一个Spring bean

我有两个包含在web.xml中的bean定义文件。请参阅下面的示例。

的applicationContext-beans1.xml

<bean name="myWao" 
    class="com.beans.myBean">  
</bean> 

的applicationContext-beans2.xml

<bean name="myWao" 
    class="com.beans.myBean">  
</bean> 

我没有遇到任何问题,到现在为止。但是,这可能会影响真正的环境,这将是多线程和群集?

注:无论是个XML加载为我能够在这两个个XML使用规定(只有一次)其它豆类

+0

这两个xml文件是否真的加载? –

+0

是的。两者都加载。 – hop

+0

[Spring's overriding bean]可能重复(http://stackoverflow.com/questions/5849192/sp​​rings-overriding-bean) –

回答

27

它是有效的,但你会发现一个Bean是被覆盖其他。您会在日志中看到这一点:

Overriding bean definition for... 

此行为允许您覆盖以前提供的bean定义。它会影响应用程序的静态组装,并且与您的问题中建议的线程/集群无关。

注意,DefaultListableBeanFactory允许您通过配置此行为setAllowBeanDefinitionOverriding()

+0

setAllowBeanDefinitionOverriding()需要尽早完成。如果以编程方式创建bean上下文,请确保使用刷新参数设置为false的构造函数,然后“手动”触发加载。即使您的spring bean分布在多个文件/上下文中,这也可以工作。否则,如果启用DEBUG日志记录,那么您将只会看到类似 的日志条目DEBUG osbfsDefaultListableBeanFactory - 用等效定义替换bean'myBean'的bean定义:替换... [spring/config1.xml]] ... ;定义在... [spring/config2.xml]]中 –

6

,这是有效和有用,尤其是当你试图改变第三方bean的实现(我的意思是,当你不能改变实现一个bean)以及你需要为bean提供/配置一些额外(合并)属性的地方。

bean的重写取决于您为通过web.xml或独立构建ApplicationContext而提供的xmls的顺序。最新的bean定义将赢得游戏。

相关问题