開發過程中遇到的org.springframework.beans.factory.BeanNotOfRequiredTypeException問題

今天開發過程中遇到了一個奇怪的問題。我有一個service名稱叫做A。然後我在我的另外Cservice中通過 @resource來引用A。但是我起的名字叫做b。(先不要考慮這奇怪的命名方式,是之前留下來的坑o(╯□╰)o)在我的這個目錄下,同時也存在這一個名字爲B的service。好了,這個時候我來啓動服務,就報如下的錯誤:org.springframework.beans.factory.BeanNotOfRequiredTypeException;Bean named 'b' is expected to be of type 'com.xxx.service.A' but was actually of type 'com.xxx.service.B' 。這個錯的大意就是,b希望的是A類型的service,結果它卻實際上是注入了B類型的service。那爲什麼會這樣呢?

這個實際上是和 註解 @resource有關係。我之前是知道@resource和@autowired 都是可以注入對象的,但是不太瞭解他們之間的異同。他們最大的區別就是 @resource 是ByName 按照名稱來注入對象,而@autowired則是ByType 按照類型來注入對象

我上述的問題就是在於,我使用了@resource註解,他會根據名稱來尋找對應的Bservice,然後他成功找到了,所以就會注入B。他不會去考慮我前面的類型實際上是A(笑哭)。那如果我把我的Bservice給刪掉,它找不到對應的Bservice,這個時候,它纔會再去根據類型尋找我對應的Aservice。

因此,在後續的工作中,可以使用@autowired來避免這種問題的產生。

以上只是自己的一些瞭解與見解,如果有任何問題,還請大家指出。謝謝各位!

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