我想禁止SpringApplication
中的bean定义覆盖。换句话说,我想要调用GenericApplicationContext.setAllowBeanDefinitionOverriding(false)
的效果。在Spring Boot中有推荐的方法吗?
答案 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"));