【发布时间】:2019-07-28 03:23:34
【问题描述】:
我想禁止在 SpringApplication 中覆盖 bean 定义。换句话说,我想要调用GenericApplicationContext.setAllowBeanDefinitionOverriding(false) 的效果。在 Spring Boot 中有推荐的方法吗?
【问题讨论】:
-
你试过了吗?
标签: spring-boot
我想禁止在 SpringApplication 中覆盖 bean 定义。换句话说,我想要调用GenericApplicationContext.setAllowBeanDefinitionOverriding(false) 的效果。在 Spring Boot 中有推荐的方法吗?
【问题讨论】:
标签: spring-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);
}
}
您可以从上述类的源代码和 JavaDocs 中找到所有其他信息。
【讨论】:
我遇到过类似的问题,但不是在 spring boot 应用程序中,而是在具有基于 xml 配置的普通 spring-mvc 应用程序中,所以这个解决方案可能会帮助人们寻找 spring-boot 应用程序以外的其他应用程序,
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
beanFactory.setAllowBeanDefinitionOverriding(false);
new XmlBeanDefinitionReader(beanFactory).loadBeanDefinitions(new ClassPathResource("spring-first.xml"));
【讨论】: