Java 为什么在一个配置中声明重写Springbean在另一个配置中是允许的?

Java 为什么在一个配置中声明重写Springbean在另一个配置中是允许的?,java,spring,Java,Spring,我开始学习Spring,并遇到了Spring的一个特点- 我不明白这个功能在哪里有用。这似乎不合逻辑,因为同一个容器将使用两个不同的XML进行配置,甚至当有两个具有相同ID的bean时,也会使用相同的XML来配置,而不是报告默认为最后一个的模糊性 是否有一个实际的场景,在这个场景中它实际上是有用的?这是一个好的做法吗?例如,这可能是有用的原因 测试 开发组件库 测试 测试时,您可以选择覆盖1个或多个bean。例如,DataSource您可能不想针对数据库的生产实例进行测试。但可能是内存中的一

我开始学习Spring,并遇到了Spring的一个特点-

我不明白这个功能在哪里有用。这似乎不合逻辑,因为同一个容器将使用两个不同的XML进行配置,甚至当有两个具有相同ID的bean时,也会使用相同的XML来配置,而不是报告默认为最后一个的模糊性


是否有一个实际的场景,在这个场景中它实际上是有用的?这是一个好的做法吗?

例如,这可能是有用的原因

  • 测试
  • 开发组件库
测试 测试时,您可以选择覆盖1个或多个bean。例如,
DataSource
您可能不想针对数据库的生产实例进行测试。但可能是内存中的一个或专门用于测试的一个。为此,您可以覆盖
DataSource
bean

开发组件库 您可以为库提供启动配置,并允许用户覆盖某些组件或让他们实现接口。这方面的一个示例是不同的Spring项目组合项目(Spring安全性、Spring批处理)如何使用其默认配置


另外,当重写bean时,spring将在应用程序启动时记录这一点

测试、开发组件库。提供合理的默认值并允许用户覆盖。在很多情况下,像这样的功能都是有用的。Spring还报告了一个bean被覆盖的事实,这也可以被禁用,但这需要您覆盖/扩展一些默认的Spring组件。@M.Deinum您应该这样做作为一个答案。此外,还有很多框架(比如Spring Security)定义了很多默认bean。如果您不能覆盖bean,那么您就不能真正轻松地定制这样的框架。