【问题标题】:Disallow Bean Definition Overriding?不允许 Bean 定义覆盖?
【发布时间】:2019-07-28 03:23:34
【问题描述】:

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

【问题讨论】:

  • 你试过了吗?

标签: spring-boot


【解决方案1】:

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

@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);
    }

}

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

【讨论】:

    【解决方案2】:

    我遇到过类似的问题,但不是在 spring boot 应用程序中,而是在具有基于 xml 配置的普通 spring-mvc 应用程序中,所以这个解决方案可能会帮助人们寻找 spring-boot 应用程序以外的其他应用程序,

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

    【讨论】:

      猜你喜欢
      • 2020-07-08
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 2013-10-02
      • 1970-01-01
      相关资源
      最近更新 更多