禁止Bean定义覆盖?

时间:2014-06-19 17:15:16

标签: spring-boot

我想禁止SpringApplication中的bean定义覆盖。换句话说,我想要调用GenericApplicationContext.setAllowBeanDefinitionOverriding(false)的效果。在Spring Boot中有推荐的方法吗?

2 个答案:

答案 0 :(得分:7)

好吧,你可以通过一些Boot功能和上下文自定义来实现它:

@EnableAutoConfiguration
public class MyApp {

    public static void main(String[] args) throws InterruptedException {
        ConfigurableApplicationContext ctx = new SpringApplicationBuilder(MyApp.class)
                .initializers(new ApplicationContextInitializer<GenericApplicationContext>() {
                    @Override
                    public void initialize(GenericApplicationContext applicationContext) {
                        applicationContext.setAllowBeanDefinitionOverriding(false);
                    }
                }).run(args);
    }

}

您可以从上述类的源代码和JavaDoc中找到所有其他信息。

答案 1 :(得分:0)

我遇到了类似的问题,但不是在Spring Boot应用程序中遇到,而是在具有基于xml配置的普通spring-mvc应用程序中遇到过,因此该解决方案可能会帮助人们寻找除spring-boot应用程序之外的人,

DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
    beanFactory.setAllowBeanDefinitionOverriding(false);
    new XmlBeanDefinitionReader(beanFactory).loadBeanDefinitions(new ClassPathResource("spring-first.xml"));