接近用了4個多月的時間,完成了整個《Spring官網閱讀》系列的文章,本文主要對本系列所有的文章做一個總結,同時也將所有的目錄匯總成一篇文章方便各位讀者來閱讀。
下面這張圖是我整個的寫作大綱
對應的文章目錄匯總如下:
本文主要涉及到官網中的
1.2
,1.3
節。主要介紹了什么是容器,容器如何工作。
本文主要涉及到官網中的
1.4
小節,主要涉及到Spring的依賴注入
在對依賴注入跟方法注入有一定了解后,我們需要立馬學習自動注入。通過這篇文章你會知道真正的
byName
跟byType
。本文主要涉及到官網中的1.4
小節
Spring官網閱讀(四)BeanDefinition(上)
本文主要涉及到官網中的
1.3
及1.5
中的一些補充知識。同時為我們1.7
小節中BeanDefinition
的合並做一些鋪墊
Spring官網閱讀(五)BeanDefinition(下)
上篇文章已經對BeanDefinition做了一系列的介紹,這篇文章我們開始學習BeanDefinition合並的一些知識,完善我們整個BeanDefinition的體系,Spring在創建一個bean時多次進行了BeanDefinition的合並,對這方面有所了解也是為以后閱讀源碼做准備。本文主要對應官網中的1.7小節
Spring官網閱讀(六)容器的擴展點(一)BeanFactoryPostProcessor
之前的文章我們已經學習完了BeanDefinition的基本概念跟合並,其中多次提到了容器的擴展點,這篇文章我們就開始學習這方面的知識。這部分內容主要涉及官網中的1.8小結。按照官網介紹來說,容器的擴展點可以分類三類,BeanPostProcessor,BeanFactoryPostProcessor以及FactoryBean。本文我們主要學習BeanFactoryPostProcessor,對應官網中內容為1.8.2小節
Spring官網閱讀(七)容器的擴展點(二)FactoryBean
在上篇文章中我們已經對容器的第一個擴展點(BeanFactoryPostProcessor)做了一系列的介紹。其中主要介紹了Spring容器中BeanFactoryPostProcessor的執行流程。已經Spring自身利用了BeanFactoryPostProcessor完成了什么功能,對於一些細節問題可能說的不夠仔細,但是在當前階段我想要做的主要是為我們以后學習源碼打下基礎。所以對於這些問題我們暫且不去過多糾結,待到源碼學習階段我們會進行更加細致的分析。
在本篇文章中,我們將要學習的是容器的另一個擴展點(FactoryBean),對於FactoryBean官網上的介紹甚短,但是如果我們對Spring的源碼有一定了解,可以發現Spring在很多地方都對這種特殊的Bean做了處理。話不多說,我們開始進入正文。
Spring官網閱讀(八)容器的擴展點(三)(BeanPostProcessor)
在前面兩篇關於容器擴展點的文章中,我們已經完成了對BeanFactoryPostProcessor很FactoryBean的學習,對於BeanFactoryPostProcessor而言,它能讓我們對容器中的掃描出來的BeanDefinition做出修改以達到擴展的目的,而對於FactoryBean而言,它提供了一種特殊的創建Bean的手段,能讓我們將一個對象直接放入到容器中,成為Spring所管理的一個Bean。而我們今天將要學習的BeanPostProcessor不同於上面兩個接口,它主要干預的是Spring中Bean的整個生命周期(實例化—屬性填充—初始化—銷毀),關於Bean的生命周期將在下篇文章中介紹,如果不熟悉暫且知道這個概念即可,下面進入我們今天的正文。
Spring官網閱讀(九)Spring中Bean的生命周期(上)
在之前的文章中,我們一起學習過了官網上容器擴展點相關的知識,包括FactoryBean,BeanFactroyPostProcessor,BeanPostProcessor,其中BeanPostProcessor還剩一個很重要的知識點沒有介紹,就是相關的BeanPostProcessor中的方法的執行時機。之所以在之前的文章中沒有介紹是因為這塊內容涉及到Bean的生命周期。在這篇文章中我們開始學習Bean的生命周期相關的知識,整個Bean的生命周期可以分為以下幾個階段:
實例化(得到一個還沒有經過屬性注入跟初始化的對象)
屬性注入(得到一個經過了屬性注入但還沒有初始化的對象)
初始化(得到一個經過了初始化但還沒有經過AOP的對象,AOP會在后置處理器中執行)
銷毀
在上面幾個階段中,BeanPostProcessor將會穿插執行。而在初始化跟銷毀階段又分為兩部分:生命周期回調方法的執行
aware相關接口方法的執行
這篇文章中,我們先完成Bean生命周期中,整個初始化階段的學習,對於官網中的章節為1.6小結
Spring官網閱讀(十)Spring中Bean的生命周期(下)
在上篇文章中,我們已經對Bean的生命周期做了簡單的介紹,主要介紹了整個生命周期中的初始化階段以及基於容器啟動停止時LifeCycleBean的回調機制,另外對Bean的銷毀過程也做了簡單介紹。但是對於整個Bean的生命周期,這還只是一小部分,在這篇文章中,我們將學習完成剩下部分的學習,同時對之前的內容做一次復習。整個Bean的生命周期,按照我們之前的介紹,可以分為四部分
實例化
屬性注入
初始化
銷毀
本文主要介紹實例化及屬性注入階段
Spring官網閱讀(十一)ApplicationContext詳細介紹(上)
在前面的文章中,我們已經完成了官網中關於IOC內容核心的部分。包括容器的概念,Spring創建Bean的模型BeanDefinition的介紹,容器的擴展點(BeanFactoryPostProcessor,FactroyBean,BeanPostProcessor)以及最重要的Bean的生命周期等。接下來大概還要花三篇文章完成對官網中第一大節的其它內容的學習,之所以要這么做,是筆者自己粗讀了一篇源碼后,再讀一遍官網,發現源碼中的很多細節以及難點都在官網中介紹了。所以這里先跟大家一起把官網中的內容都過一遍,也是為了更好的進入源碼學習階段。
本文主要涉及到官網中的1.13,1.15,1.16小節中的內容以及第二大節的內容
Spring官網閱讀(十二)ApplicationContext詳解(中)
在上篇文章中我們已經對ApplicationContext的一部分內容做了介紹,ApplicationContext主要具有以下幾個核心功能:
國際化
借助Environment接口,完成了對Spring運行環境的抽象,可以返回環境中的屬性,並能出現出現的占位符
借助於Resource系列接口,完成對底層資源的訪問及加載
繼承了ApplicationEventPublisher接口,能夠進行事件發布監聽
負責創建、配置及管理Bean
在上篇文章我們已經分析學習了1,2兩點,這篇文章我們繼續之前的學習
Spring官網閱讀(十三)ApplicationContext詳解(下)
在前面兩篇文章中,我們已經對ApplicationContext的大部分內容做了介紹,包括國際化,Spring中的運行環境,Spring中的資源,Spring中的事件監聽機制,還剩唯一一個BeanFactory相關的內容沒有介紹,這篇文章我們就來介紹BeanFactory,這篇文章結束,關於ApplicationContext相關的內容我們也總算可以告一段落了。本文對應官網中的1.16及1.15小結
Spring官網閱讀(十四)Spring中的BeanWrapper及類型轉換
BeanWrapper是Spring中一個很重要的接口,Spring在通過配置信息創建對象時,第一步首先就是創建一個BeanWrapper。這篇文章我們就分析下這個接口,本文內容主要對應官網中的
3.3
及3.4
小結
Spring官網閱讀(十五)Spring中的格式化(Formatter)
在上篇文章中,我們已經學習過了Spring中的類型轉換機制。現在我們考慮這樣一個需求:在我們web應用中,我們經常需要將前端傳入的字符串類型的數據轉換成指定格式或者指定數據類型來滿足我們調用需求,同樣的,后端開發也需要將返回數據調整成指定格式或者指定類型返回到前端頁面。這種情況下,Converter已經沒法直接支撐我們的需求了。這個時候,格式化的作用就很明顯了,這篇文章我們就來介紹Spring中格式化的一套體系。本文主要涉及官網中的3.5及3.6小結
在前面的文章我們學習過了Spring中的類型轉換以及格式化,對於這兩個功能一個很重要的應用場景就是應用於我們在XML中配置的Bean的屬性值上,如下:
1 2 3 4 5 在上面這種情況下,我們從XML中解析出來的值類型肯定是String類型,而對象中的屬性為int類型,當Spring將配置中的數據應用到Bean上時,就調用了我們的類型轉換器完成了String類型的字面值到int類型的轉換。那么除了在上面這種情況中使用了類型轉換,還有哪些地方用到了呢?對了,就是本文要介紹的數據綁定–DataBinder。
在前文中我們一起學習了Spring中的數據綁定,也就是整個DataBinder的體系,其中有提到DataBinder跟校驗相關。可能對於Spring中的校驗大部分同學跟我一一樣,都只是知道可以通過@Valid / @Validated來對接口的入參進行校驗,但是對於其底層的具體實現以及一些細節都不是很清楚,通過這篇文章我們就來徹底搞懂Spring中的校驗機制。
在學習Spring中某個功能時,往往要從Java本身出發。比如我們之前介紹過的Spring中的國際化(見《Spring官網閱讀(十一)》)、Spring中的ResolvableType(見《Spring雜談》系列文章)等等,它們都是對Java本身的封裝,沿着這個思路,我們要學習Spring中的數據校驗,必然要先對Java中的數據校驗有一定了解。
本篇文章將作為整個Spring官網閱讀筆記的最后一篇。如果要談SpringFramework必定離不開兩點
- IOC(控制反轉)
- AOP(面向切面)
在前面的文章中我們已經對IOC做過詳細的介紹了,本文主要介紹AOP,關於其中的源碼部分將在專門的源碼專題介紹,本文主要涉及的是AOP的基本概念以及如何使用,本文主要涉及到官網中的第5、6兩大章
要是文章有幫助到你的話,記得點個贊吧!~