我可以将Spring Framework bean名称预定义用于自己的目的吗?
比如定义已经使用的名称的自己的bean?在开发过程中我不知道现有名称并担心可能发生冲突的问题。
使用空的Spring Boot应用程序,有很多" generic"分配的名称,如:
error
mvcValidator
viewResolver
counterService
serverProperties
您可以查看:
ConfigurableApplicationContext ctx = SpringApplication.run(App.class);
Arrays.stream(ctx.getBeanDefinitionNames()).forEach(name -> System.out.println(name));
答案 0 :(得分:1)
如果创建了bean,并且已经存在具有相同名称的bean,则新bean将覆盖现有bean。
这很好,因为它允许你使用自己的bean来替换spring默认bean,但它绝对允许意外破坏spring默认bean的功能。
可以使用
更改此行为org.springframework.beans.factory.support.DefaultListableBeanFactory#setAllowBeanDefinitionOverriding
如果设置为false,则不允许覆盖,而是抛出异常。如何做到这一点在this post
中得到了解答如果spring覆盖现有bean,您将在日志中看到类似
的内容DefaultListableBeanFactory : Overriding bean definition for bean 'viewResolver' with a different definition:
所以要注意这一点,但在实践中它并不是一个大问题。