我可以使用弹簧框架bean的预定义出于自己的目的吗?
喜欢定义自己的bean使用已经使用的名称?在开发过程中我不知道现有名称并担心可能发生的冲突的问题。
使用空的春季启动应用程序,有很多分配的"通用"名称,例如:
error
mvcValidator
viewResolver
counterService
serverProperties
您可以检查自己:
ConfigurableApplicationContext ctx = SpringApplication.run(App.class);
Arrays.stream(ctx.getBeanDefinitionNames()).forEach(name -> System.out.println(name));
如果创建了bean,并且已经存在具有相同名称的bean,则新的bean将覆盖现有的bean。
这很好,因为它允许您使用自己的豆类替换弹簧默认豆,但它肯定允许意外打破弹簧默认bean的功能。
可以使用
更改此行为org.springframework.beans.factory.support.defaultlistablebeanfactory#setallowBeanDefinitionOverriding
如果设置为false,则不允许替代,而将抛出一个异常。在这篇文章中回答了如何做到这一点
如果弹簧覆盖了现有的bean,您将在日志中看到
之类的东西DefaultListableBeanFactory : Overriding bean definition for bean 'viewResolver' with a different definition:
所以要注意的是,但实际上它不是一个大问题。