使用Spring也有很長一段時間了,但還沒有深入理解過其設(shè)計的思想和實現(xiàn)方式。在此記錄學(xué)習(xí)Spring的一些筆記。
Spring核心主要有三部分: Bean、Context、Core
Bean可以理解為使用特定的箱子包裝好的貨物,這個貨物就是Object對象。Context可以看做裝載貨物的卡車。那么Core就是搬運(yùn)貨物的工人或工具了,他負(fù)責(zé)發(fā)現(xiàn)、建立和維護(hù)Bean之前的關(guān)系。
Bean
Bean是Spring操作的對象,可以說是Spring框架中最核心的部分了??梢园l(fā)現(xiàn),Spring的整個工作流程,都是對Bean進(jìn)行一系列的操作。
一個對象要交給Spring進(jìn)行管理,首先要將其用特定的箱子包裝好,轉(zhuǎn)化成相應(yīng)的Bean,你可以在配置文件中配置Bean,表示我要將這個對象交給Spring容器管理,就像你在寄快遞的時候要填一張快遞單表示我要把貨物交給快遞公司幫我運(yùn)送一樣。
Context
總所周知,Spring的兩大特性是IOC和AOP,IOC就是控制反轉(zhuǎn),意思就是你不用親自去管理對象,而是將對象的操作交給Spring容器來完成。既然如此,Spring就要有容器來容納和維護(hù)這些對象,而Context就是這樣的容器,也稱為IOC容器。將對象轉(zhuǎn)化為Bean放進(jìn)IOC容器中,就可以操作這些對象了。就像你把貨物包裝好裝進(jìn)卡車中,那快遞公司就能幫你運(yùn)貨物了。
Core
core封裝從不同途徑獲取資源的方法,然后提供一個統(tǒng)一的接口來加載所有的資源。因為context是容器,它沒辦法自己去發(fā)現(xiàn)對象在哪,所以需要將這個任務(wù)交給其他人來做,這個人就是Core,而Core是一個非常聰明的人,他知道對象定義在不同的地方,他不可能親自去每一個地方來獲取這些對象。所以他就發(fā)展了很多下線,有的負(fù)責(zé)從url獲取對象,有的負(fù)責(zé)從類路徑,有的從文件去獲取等等,最后匯總給一個人ResourceLoader,你只需要實現(xiàn)他,就能從他身上獲取這些資源。
接下來會慢慢地熟悉這個Spring框架。本來想bean、context、core分為三個模塊分開解析的。但是由于對整個Spring的運(yùn)行過程不熟悉。所以對每個模塊的類完全無法理解。比如BeanFactory、BeanDefinitionReader是干嘛的BeanDefinitionRegister又是干啥的。BeanFactory和ApplicationContext是啥關(guān)系。。一臉懵逼。。。所以還是從過程入手,在慢慢切入其中的一個面。暫且把這個過程分為六個部分吧
- 解析BeanDefinition
- 注冊BeanDefinition
- 容器初始化
- 加載bean
- 實例化bean
- 資源定位的過程(個人對這部分不是很感興趣,所以放在最后)
當(dāng)然為了熟悉這個過程,目前只著重于使用GenericApplicationContext以及XmlBeanDefinitionReader來解析,了解整個過程后,再對每個組件詳細(xì)講解。