spring出現重名bean,報錯BeanDefinitionOverrideException,發生覆蓋的問題討論

關於同名bean的註冊問題,spring和springboot有着不同的處理方式:

  1. spring中如果出現兩個同名的bean在註冊的時候,並不會報出任何的異常,而是後一個註冊的bean會將之前註冊的bean覆蓋掉,這在啓動的時候是沒有任何問題的;但是在實際運行的過程中可能會發生錯誤,這時如果想再去彌補,就會發現很難找到這個錯誤的所在。
  2. 但是springboot中並不是如此,springboot中如果出現重名的bean,並不會出現覆蓋的問題,而是在啓動過程中,註冊時候直接報出BeanDefinitionOverrideException,名稱重複異常,可以說是將bug扼殺在搖籃中。

具體的原因是什麼呢?

那就不得不提這個配置:

spring.main.allow-bean-definition-overriding

如果這個配置爲true,表示後發現的bean會覆蓋之前相同名稱的bean,這個時候就會發生覆蓋問題;如果設置爲false,那麼就不會發生覆蓋,避免掉了潛在的問題。

具體的詳情可以參考本篇文章
 ⬇
https://blog.csdn.net/liubenlong007/article/details/87885567

這個時候問題的本質就顯露出來了,spring中默認是將配置設置爲true的,這個時候如果有bean的name重複的時候,並不會出現什麼異常;而springboot中可能是考慮的更加周全一些,讓配置設置爲false,這個時候如果出現問題,是可以及時處理掉的。

那麼我們是希望bean能夠重複嗎?

答案是否定的,因爲使得bean的name重複,並不會真的存在兩個bean,而是第一個被覆蓋掉,這樣兩個bean的價值也就不存在了。

我們能做的就是儘量保證每個bean的name都是不重複的,這樣既可以做到見名知意,又可以避免錯誤發生。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章