当前位置: 首页 > 知识库问答 >
问题:

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

那鹏
2023-03-14

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

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

应用Context-beans1.xml

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

applicationContext-beans2。xml

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

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

注意:这两个XMLs都被加载,因为我可以使用在这两个XMLs中定义的其他bean(只有一次)

共有3个答案

端木皓君
2023-03-14

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

bean的重写取决于通过web构建ApplicationContext所提供的XML的顺序。xml或单机版。最新的bean定义将赢得游戏。

冉弘化
2023-03-14

从Spring Boot 2.1版开始,默认情况下会禁用它。(链接)

Bean重写:默认情况下,Bean重写已被禁用,以防止Bean被意外重写。如果依赖于重写,则需要设置spring。主要的允许bean定义覆盖true

宰父俊民
2023-03-14

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

Overriding bean definition for...

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

请注意,DefaultListableBeanFactory允许您通过setAllowBean定义重写()配置此行为

 类似资料:
  • 我有两个类,它们具有相同的类名并使用相同的包名。但是,这两个类文件位于不同的目录中。这两个类之间的另一个不同之处是,每个类中都有其他类中没有的方法。本质上,我想将这些方法拆分为两个使用相同名称但不同文件夹的单独文件。 理论上,我认为这是可能的,因为Java编译器在构建输出时确实维护了目录结构。所以在运行时,如果在类中调用了一个方法,Java可能会在任何一个文件中找到该方法。 这可能吗?我使用的是I

  • 问题内容: 我有使用JQuery..I米一个问题在我的代码发送字段名和序列号,其通过获取其数据的ctrller 和并且与序列表中没有given..And生成预览显示面板更新字段名与插入的字段..现在,我再次尝试更改字段名称。tat是现在,当我单击生成的显示面板字段时,相应的设置将打开,我将尝试立即更改字段名称 两者和都相同..在我发送的是字段名和序列号 在功能2中,我要发送相同的字段名和(但其他值

  • 在一个由Swagger-UI渲染的API规范中,同一个路径是否可能出现不止一次? 我应该创建单独的api规范并加载两个Swagger-UI实例吗?处理这件事的最好方法是什么? 例如,我有一个名为/oauth/token的endpoint,我想用一组oauth Authorization Code流的参数对其进行记录,用一组不同的参数对client_credentials流的同一个endpoint/

  • 假设您有2个包,并且有名为-Test的公共类。 第一个包。测试 第二包测试 它们中的每一个都有实例变量-x。 在第一种情况下-int x=2; 在第二种情况下-int x=3; 我想导入FirstPackage。在第二个包内测试。测试并打印值为2的x。 我的代码: 但是输出是3。如何打印?

  • 问题内容: 如果我有两个CSS文件: 文件1: 档案2: 并将它们包含在页面中,哪一个优先?我猜是最后加载的那个吗?如果是这样,是否有办法确保最后加载哪个CSS文件? 问题答案: 在这种情况下,最后一个加载的(或如David指出的,更准确地 包括 最后一个)获胜。但是请注意,这是基于属性的,如果您加载具有不同属性的2个定义,则结果将是组合。如果属性同时出现在第一个属性和第二个属性中,则最后一个属性

  • 问题内容: 我想做这样的事情: 现在调用类或它的实例: 显然,此确切的代码不起作用,但是是否有类似的方法可以使它起作用?还是任何其他解决方法都可以在没有太多“怪异”内容的情况下获得这种行为? 问题答案: 类和实例方法位于同一个命名空间中,并且您不能像这样重用名称。在这种情况下,最后的定义将获胜。 类方法将继续在实例上运行,但是, 无需 创建单独的实例方法。只需使用: 因为方法继续绑定到该类: 明确