我可以将Spring Framework bean名称预定义用于自己的目的吗?

时间:2017-02-18 20:53:59

标签: spring spring-boot

我可以将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));

1 个答案:

答案 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: 

所以要注意这一点,但在实践中它并不是一个大问题。