你非常熟悉的Spring的@Autowired的底層注入原理

前言:今天在羣裏看有人在討論@Autowired相關的知識,有很多人說按照類型裝配依賴對象,有說按name裝配依賴的對象,有的說先按類型再按照name去裝配......這些問題雖然很基礎,但是確實也有很多人不清楚,很多人也是隻是記住了裝配的對象,這種也就糊弄下低級面試官而已,今天我們就從spring源碼的角度來看這個面試官喜歡問的@Autowired這個裝配順序。

1.先來一個入門小demo(前提是要有spring-context的依賴),幾個基礎的類,我就不詳細介紹了,自己看截圖

2.直接啓動main方法

結果:毫無疑問,這個時候肯定會報錯,會報錯,大致的錯誤應該就是,希望找到一個bean但是找到兩個。。。。

如果把testService裏面注入的名字改一下就不會報錯了

從這個簡單的demo,你能夠確定@Autowired是按照什麼裝配的嗎?講道理我覺得不能。我也不去做這個假設了,沒有必要,直接看源碼才最有說服力。這邊我要提一下:spring的裝配模式有多種,byName,byType,construct,no源碼用0,1,2,等表示,

但是裝配技術僅僅有byName和byType,這點以後總結spring源碼的時候會詳細說的。

源碼分析:(這次我只是直接分析這一次裝配的源碼,spring的屬性填充,後置處理器啥的我都不講,這些都是在我別的專題有講過的),大致調用鏈就是(先調用createBaen-->doCreateBean-->populateBean屬性填充-->調用後置處理器來填充屬性,Autowired的後置處理器是AutowiredAnnotationBeanPostProcessor)

 

 

 

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