关于 BeanDefinitionOverrideException的解析

  最近在项目开发过程中遇到如下错误:大概就是重名bean的覆盖问题发生报错,百思不得其解。

       

  首先查看了一下 Springboot的源码,截图如下,可以看到  BeanDefinitionOverrideException 在springboot 中没有初始化的默认值,因此即是false,但是可以手动设置 其属性的值。可以在配置文件中进行配置。

  

spring:
  main:
    allow-bean-definition-overriding: true

  然后看了下Spring中的源码,发现BeanDefinitionOverrideException 其默认值为 true,即在spring中允许重名bean的覆盖问题。

  

  

  特此总结如下:

  1) 在spring中如果出现两个同名的bean注册,那么后面注册的bean会覆盖前面注册的bean,并且不会报任何异常,因为spring其是允许bean的重复,这样可以保证项目顺利启动,但是在运行过程中可能会发生错误。

  2) 在Springboot中是不允许重名bean同时注册,因为其默认配置属性是false,因此在项目启动过程中会发生报错BeanDefinitionOverrideException,这样虽然会使得项目启动失败,但是也减少了项目成功启动后在运行过程中排查bug 的时间。

  3)因此,建议在springboot项目中还是不要进行重名bean允许覆盖的配置,并且也不要使用同名bean。

 

posted @ 2020-09-29 18:29  Demrystv  阅读(2426)  评论(0编辑  收藏  举报