java中的資料類型包括八種基本資料類型和引用類型,這兩類資料類型都可以作為屬性的資料類型,對於引用類型,包括Java自帶的一些類,比如String、List、Map等,這些都可以作為注入的
2021-06-30 08:53:45
java中的資料類型包括八種基本資料類型和引用類型,這兩類資料類型都可以作為屬性的資料類型,對於引用類型,包括Java自帶的一些類,比如String、List、Map等,這些都可以作為注入的目標類型,另外還包括自定義的引用類型,比如在A類中有一個數據類型為B的引用類型,那麼A、B都被spring管理,在生成A的例項的時候必定會把對B的引用進行注入。spring是如何進行注入的,有兩種不同的方式,分別是按照類型和名稱,所謂安裝類型就是在spring的IOC容器中尋找相同類型的bean的例項進行注入,所謂按照名稱就是在spring的IOC容器中按照bean的名稱查詢相同名稱的bean進行注入。
在spring的IOC容器中,所有的物件都叫做bean,bean是有生命週期的,一個bean從spring容器啟動開始到spring容器關閉,要經歷很多步驟。我們通過XML或者註解的形式配置的bean要被spring解析為beanDefinition物件,也就是spring可以識別的bean的元資訊,然後spring根據beanDefinition的資訊創建bean例項,這裡的bean不是普通意義上的java bean,而是spring中定義的一個例項的統稱,bean的創建過程又大體可描述為bean例項化前、bean例項化、屬性注入、bean初始化前、bean初始化、bean初始化後等過程,這些過程的執行都伴隨著相關的bean後置處理器的執行。
上面提到的beanDefinition相關的資訊完全可以在源碼中體現,
在DefaultListableBeanFactory中有BeanDefinitionMap和beanDefinitionNames兩個變數,分別儲存的是BeanDefinition和BeandDefinitionName,佐證了前面提到的資訊。
那麼bean中屬性注入是在什麼地方呢,下面看這樣一個方法,在AbstractAutowireCableBeanFactory中的createBean方法中,
有doCreateBean方法,該方法同樣在AbstractAutowireCapableBeanFactory類中,
有populateBean方法,該方法中便完成的是依賴注入相關的內容,具體的執行邏輯在下面的紅框中,
細心的讀者會發現這不是在迴圈BeanPostProcessor嗎,然後執行其中的postProcessProperties方法,沒錯是這樣的,看實現了postProcessProperties方法的類有哪些,
在這當中有兩個很重要的類分別是AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor,這兩個類分別完成的是註解@Autowired和@Resource的屬性注入功能,這兩個註解在《spring中BeanPostProcessor之四:AutowiredAnnotationBeanPostProcessor(01)和《spring中BeanPostProcessor之二:CommonAnnotationBeanPostProcessor(01)》中分別進行了介紹。其主要邏輯在各自的postProcessProperties方法中,以AutowiredAnnotationBeanPostProcessor為例,
主要的邏輯在metadata.inject方法中,
可以看到該方法從beanFactory中找到對應的value,其中找的具體過程在resolveDependency方法中,具體過程在doResolveDependency方法中,感興趣的讀者可以自己翻閱源碼。
本篇文章重點在引導讀者去認識依賴注入的過程,依賴注入發生在bean創建過程中,在bean例項化之後進行屬性的注入,屬性的注入是通過bean後置處理器完成,針對不同的註解使用不同的後置處理器完成屬性注入,注入的過程肯定是在spring上下文中尋找匹配的bean的bean例項,最後通過反射的方式設定屬性值,
如果文章對你有幫助的話,就點贊支援一波吧,非常感謝!
如何獲取Java免費學習資料?
轉發分享此文,後臺私信小編:「 資料」即可獲取。(注:轉發分享,感謝大家)
相關文章
java中的資料類型包括八種基本資料類型和引用類型,這兩類資料類型都可以作為屬性的資料類型,對於引用類型,包括Java自帶的一些類,比如String、List、Map等,這些都可以作為注入的
2021-06-30 08:53:45
自從手機產品普及之後,朋友和朋友之間的社交已經變得少了很多,起碼面對面交流的機會很少,即使有,也是一個人一款手機進行遊玩。不過,現在大家的生活都忙了起來,對手機產品也沒有那
2021-06-30 08:52:14
微軟在 Windows 11 中引入一項新的動態重新整理率 (DRR) 功能,旨在節省膝上型電腦的電池壽命並在真正需要時提高重新整理率。#Windows11# 許多膝上型電腦現都配備 120Hz 及更
2021-06-30 08:32:37
熱門手機數碼資訊早知道,快來關注作者。編輯|孫鳳新稽核|文崢近日,據香港經濟日報訊息,蘋果公司用於組裝新一代iPhone的部分零件已經到貨,這意味著新款iPhone 13即將進入量產。通
2021-06-30 08:11:12
中芯國際真的是未來可期!當眾多目光聚焦在中芯國際身上的時候,當中芯拿出14nm晶片產能的時候,有記者問梁孟鬆,中芯的14nm可否在國際上一戰,當時的梁孟鬆還表示,儘管現在14nm實現了
2021-06-30 08:08:38
6月30日晨,為您推送科技行業最新訊息1、華為P50參數曝光:竟出現了驍龍888!料人表示華為P50將分為兩款機型,其中分別搭載驍龍888 4G版和麒麟9000L晶片。華為P50將搭載的驍龍888 4
2021-06-30 08:08:04