真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Spring源碼中關(guān)鍵類的梳理工作-創(chuàng)新互聯(lián)

寫在前面:

為了便于自己及大家對源碼的深刻了解,現(xiàn)在將Spring中的關(guān)鍵類進行一個關(guān)系的梳理。梳理類之前,我們不妨簡單梳理一遍Spring的ioc的加載流程,?ApplicationContext classPath = new MyClassPathXmlApplicationContext("appicationContext.xml");一共一行代碼,內(nèi)容卻很多。

創(chuàng)新互聯(lián)建站是一家企業(yè)級云計算解決方案提供商,超15年IDC數(shù)據(jù)中心運營經(jīng)驗。主營GPU顯卡服務(wù)器,站群服務(wù)器,資陽托管服務(wù)器,海外高防服務(wù)器,機柜大帶寬租用·托管,動態(tài)撥號VPS,海外云手機,海外云服務(wù)器,海外服務(wù)器租用托管等。

1. 首先會創(chuàng)建一些資源加載器,創(chuàng)建一些環(huán)境所需要的東西

2. 然后就會對配置文件名進行解析處理。

3. 做一些容器的初始化工作,包括但不限于設(shè)置容器的啟動時間、設(shè)置活躍狀態(tài),準備監(jiān)聽器集合,事件集合等

4. 創(chuàng)建容器并加載xml文件,然后把文件內(nèi)容封裝成可以處理的對象

5.?

大致流程了解了,我們需要按照正常的思路來梳理一些關(guān)鍵類

一、資源: 1. 容器的本質(zhì)就是要把appicationContext.xml文件讀取并封裝到容器中并按照一定的規(guī)則進行實例化和初始化的工作。由于我們的bean都在里邊進行配置定義,那 Spring 總得對這個文件進行讀取并解析吧!

Resource就是表示資源的大的抽象接口,其中有很多對具體文件類型、資源類型的解析的實現(xiàn)類:(這種設(shè)計模式也是Spring常用的策略模式)

2. 表示資源的有了,就需要有加載資源的類,于是就有了ResourceLoader組件,該組件負責對 Spring 資源的加載,資源指的是xmlproperties等文件資源,返回一個對應類型的Resource對象。ResourceLoader組件其實跟Resource組件差不多,都是一個根接口,對應有不同的子類實現(xiàn),比如加載來自文件系統(tǒng)的資源,則可以使用FileSystemResourceLoader, 加載來自ServletContext上下文的資源,則可以使用ServletContextResourceLoader。還有最重要的一點,ApplicationContext,AbstractApplication是實現(xiàn)了ResourceLoader的,這說明什么呢?說明我們的應用上下文ApplicationContext擁有加載資源的能力,這也說明了為什么可以通過傳入一個String resource pathClassPathXmlApplicationContext("applicationContext.xml")就能獲得 xml 文件資源的原因了。

3. 既然我們擁有了加載器ResourceLoader,也擁有了對資源的描述Resource, 但是我們在 xml 文件中聲明的標簽在 Spring 又是怎么表示的呢?于是就引入一個叫BeanDefinition的組件,該組件對bean的屬性的做了全部的定義:常見的scope,dependOn等

BeanDefinition有很多實現(xiàn)子類:其中RootBeanDefinition是最常用的實現(xiàn)類,它對應一般性的元素標簽,GenericBeanDefinition是自2.5以后新加入的bean文件配置屬性定義類,是一站式服務(wù)類。在配置文件中可以定義父和子,父RootBeanDefinition表示,而子ChildBeanDefiniton表示,而沒有父就使用RootBeanDefinition表示。AbstractBeanDefinition對兩者共同的類信息進行抽象。?Spring通過BeanDefinition將配置文件中的配置信息轉(zhuǎn)換為容器的內(nèi)部表示,并將這些BeanDefiniton注冊到BeanDefinitonRegistry中。Spring容器的BeanDefinitionRegistry就像是Spring配置信息的內(nèi)存數(shù)據(jù)庫,主要是以map的形式保存,后續(xù)操作直接從BeanDefinitionRegistry中讀取配置信息。一般情況下,BeanDefinition只在容器啟動時加載并解析,除非容器刷新或重啟,這些信息不會發(fā)生變化,當然如果用戶有特殊的需求,也可以通過編程的方式在運行期調(diào)整BeanDefinition的定義。

二、加載:

1.?有了加載器ResourceLoader,也擁有了對資源的描述Resource,也有了對bean的定義,我們不禁要問,我們的Resource資源是怎么轉(zhuǎn)成我們的BeanDefinition的呢?BeanDefinitionReader組件就誕生了。其實現(xiàn)子類中有PropertiedBeanDefinitionReader,XmlBeanDefinitionReader和GroovyBeanDefinitionReader分別對不同類型的文件進行加載。

2. 以上組件齊全以后就具備了把資源加載到工廠的能力了,但是還需要將BeanDefinition注冊到工廠中去,這樣使用getBean()的時候才能獲取到對應的bean,BeanDefinitionRegistry就出現(xiàn)了。

其定義了如何把beanDefinition注冊到容器中的規(guī)范:

其對應的是實現(xiàn)類:

SimpleBeanDefinitionRegister,DefaultListableBeanFactory,GenericApplicationContext,其中SimpleBeanDefinitionRegistry,DefaultListableBeanFactory都持有一個 Map,也就是說這兩個實現(xiàn)類都保存了 bean。而GenericApplicationContext則持有一個DefaultListableBeanFactory對象引用用于獲取里邊對應的 Map。

三、環(huán)境,配置:

以上兩點中ApplicationContext貫穿了所有,因此稱之為容器。除了加載和存儲的過程,還有一些比如:Environment(環(huán)境),PropertyPlaceholderHelper(資源占位符),BeanFactory(獲取和處理bean的工廠類)等。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


文章題目:Spring源碼中關(guān)鍵類的梳理工作-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://weahome.cn/article/dpihis.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部