使用相同名称两次定义相同的Spring bean

hop*_*hop 20 spring inversion-of-control javabeans

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

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

的applicationContext-beans1.xml

<bean name="myWao"
    class="com.beans.myBean">       
</bean> 
Run Code Online (Sandbox Code Playgroud)

的applicationContext-beans2.xml

<bean name="myWao"
    class="com.beans.myBean">       
</bean> 
Run Code Online (Sandbox Code Playgroud)

到目前为止我没有遇到任何问题.但是,这可能会影响多线程和群集的真实环境吗?

注意:两个XML都被加载,因为我能够使用两个XML中定义的其他bean(只有一次)

Bri*_*new 39

它是有效的,但你会发现另一个bean会覆盖一个bean.你会在日志中看到这个

Overriding bean definition for...
Run Code Online (Sandbox Code Playgroud)

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

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


RP-*_*RP- 10

这是有用且有用的,尤其是当您尝试更改第三方bean的实现时(我的意思是,您不允许更改bean的实现)以及您需要提供/配置一些额外(合并)属性的位置豆子.

覆盖bean取决于您提供的用于构建ApplicationContextthrough web.xml或独立的xmls的顺序.最新的bean定义将赢得比赛.


H.Ç*_*Ç.T 10

从 Spring Boot 2.1 版开始,它默认被禁用。(链接

Bean Overriding:默认情况下禁用 Bean 覆盖以防止 bean 被意外覆盖。如果您依赖覆盖,则需要设置 spring.main.allow-bean-definition-overridingtrue.