Java 禁用BeanDefinition覆盖Spring Boot wep应用程序(war文件)

Java 禁用BeanDefinition覆盖Spring Boot wep应用程序(war文件),java,spring-boot,web,Java,Spring Boot,Web,如果我有重复的bean名称,Spring boot将覆盖它。我想禁用此功能。我看到很多关于这个的讨论,其中它禁用了main方法内部的重写。但在web应用程序中,根本不会调用main方法。如何禁用它?在主方法中,您需要创建一个新的ApplicationContextInitializer并重写其initialize()方法以禁用bean定义重写。见下文: new SpringApplicationBuilder(SpringBootApp.class) .initializers(new

如果我有重复的bean名称,Spring boot将覆盖它。我想禁用此功能。我看到很多关于这个的讨论,其中它禁用了main方法内部的重写。但在web应用程序中,根本不会调用main方法。如何禁用它?

在主方法中,您需要创建一个新的
ApplicationContextInitializer
并重写其
initialize()
方法以禁用bean定义重写。见下文:

new SpringApplicationBuilder(SpringBootApp.class)
    .initializers(new ApplicationContextInitializer<GenericApplicationContext>()
        {
            @Override
            public void initialize(GenericApplicationContext applicationContext)
            {
                applicationContext.setAllowBeanDefinitionOverriding(false);
            }
        })
    .run(args);

我已经说过,这个webapp not jar根本没有调用main方法。不起作用,我在上得到了语法错误:applicationContext.setAllowBeanDefinitionOverriding(false)@Mohammad Karmi是的,因为您需要提供此功能的
ConfigurableApplicationContext
实现(即
AbstractRefreshableApplicationContext
)。请参阅修复了语法错误,但仍未禁用重写
public class CustomInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext>
{
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) 
    {
        applicationContext.setAllowBeanDefinitionOverriding(false);
    }
}

public class WebInitializer implements WebApplicationInitializer 
{

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException
    {
        DispatcherServlet servlet = new DispatcherServlet();
        servlet.setContextInitializers(new CustomInitializer());
    }
}