我可以出于自己的目的使用弹簧框架bean名称的预定义



我可以使用弹簧框架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: 

所以要注意的是,但实际上它不是一个大问题。

最新更新