gpt4 book ai didi

spring - 如何停止在 Spring 中覆盖 bean

转载 作者:行者123 更新时间:2023-12-05 01:07:07 26 4
gpt4 key购买 nike

我注意到如果你在两个 xml 文件中定义了一个具有相同 id 的 bean,它将在第二个文件中被覆盖。

Say in file a.xml i have
<bean id="abc" />

Say in file b.xml i have
<bean id="abc" />

然后提取 b.xml 的 bean “abc”。 Spring中有没有办法阻止覆盖,即无论有多少xml有bean abc都应该是唯一的。

最佳答案

您可以通过调用 setAllowBeanDefinitionOverriding 禁用该功能以禁止 beanoverriding。并通过 false .这必须在加载任何内容之前尽早完成。您要么需要创建自己的自定义 ContextLoader为此或(如果您使用的是 Spring 3.1 或更高版本)您可以创建一个 ApplicationContextInitializer并在您的 web.xml 中注册它。

public class OverrideDisablingApplicationContextInitializer implements ApplicationContextInitializer {

public void void initialize(<? extends ConfigurableApplicationContext> applicationContext);
if (applicationContext instanceof AbstractRefreshableApplicationContext) {
(AbstractRefreshableApplicationContext (applicationContext)).setAllowBeanDefinitionOverriding(false);
}

}

在您的 web.xml 中添加以下内容(对于 ContextLoaderListener,在需要时为 DispatcherServlet 使用初始化参数)
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>your.package.here.OverrideDisablingApplicationContextInitializer<param-value>
</context-param>

从我的头顶来看,这应该禁用覆盖行为。如果您使用 springs WebApplicationInitializer,它会更容易,因为您可能正在构建 ApplicationContext自己,然后您可以直接调用该方法,而不是 ApplicationContextInitializer需要。

链接
  • ApplicationContextInitializer javadoc
  • AbstractRefreshableApplicationContext.setAllowBeanDefinitionOverriding javadoc
  • 关于spring - 如何停止在 Spring 中覆盖 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19034273/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com