成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

SpringMVC源碼分析-創(chuàng)新互聯(lián)

Pogy原創(chuàng),未經(jīng)允許,請(qǐng)勿轉(zhuǎn)載?。。?/strong>

創(chuàng)新互聯(lián)建站一直通過(guò)網(wǎng)站建設(shè)和網(wǎng)站營(yíng)銷(xiāo)幫助企業(yè)獲得更多客戶(hù)資源。 以"深度挖掘,量身打造,注重實(shí)效"的一站式服務(wù),以網(wǎng)站制作、網(wǎng)站建設(shè)、移動(dòng)互聯(lián)產(chǎn)品、成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)服務(wù)為核心業(yè)務(wù)。10年網(wǎng)站制作的經(jīng)驗(yàn),使用新網(wǎng)站建設(shè)技術(shù),全新開(kāi)發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價(jià)格便宜而且實(shí)用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡(jiǎn)單易用,維護(hù)方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。

springMVC是一個(gè)建立在spring框架基礎(chǔ)之上的一個(gè)web層框架,它負(fù)責(zé)發(fā)送每個(gè)請(qǐng)求到合適的處理程序,使用視圖來(lái)最終返回響應(yīng)結(jié)果的概念。

SpringMVC最重要的一個(gè)類(lèi)是DispatchServlet這個(gè)類(lèi),當(dāng)我們打開(kāi)這個(gè)源碼,感到一臉蒙蔽。但是坐下來(lái)冷靜一下看看,發(fā)現(xiàn),這個(gè)東西竟然繼承了一些類(lèi)

SpringMVC源碼分析

跟過(guò)去看看

SpringMVC源碼分析

好像也沒(méi)啥線索,繼續(xù)跟

SpringMVC源碼分析

這時(shí)有了重大發(fā)現(xiàn),發(fā)現(xiàn)這個(gè)DispatchServlet終歸結(jié)底還是繼承了HttpServlet,那么我們就可以按照普通的servlet的生命周期來(lái)分析它了。

Servlet的生命周期大家都還記得吧,不記得沒(méi)關(guān)系,我來(lái)簡(jiǎn)單列一下

1.     首先tomcat啟動(dòng)的時(shí)候會(huì)去查詢(xún)web.xml中的配置文件找到servlet的配置,然后會(huì)通過(guò)new關(guān)鍵字創(chuàng)建這個(gè)servlet的實(shí)例。

2.     然后調(diào)用這個(gè)servlet的init方法去初始化,然后把這個(gè)servlet放入容器中管理,等待使用。

3.     當(dāng)容器關(guān)閉時(shí),tomcat會(huì)調(diào)用這個(gè)servlet的destroy方法來(lái)做一些善后工作。

Ok,下面我們就找init方法吧,看看這里面都干了些什么吧

SpringMVC源碼分析

這里面沒(méi)有什么太復(fù)雜的邏輯,就是把配置DispatchServlet配置參數(shù)加載到內(nèi)存中,以供spring使用。有的朋友就問(wèn)了,什么參數(shù)

SpringMVC源碼分析主要就是這里面調(diào)用了initServletBean方法,這個(gè)方法在這個(gè)類(lèi)中是空的,而它的子類(lèi)實(shí)現(xiàn)了它,springmvc中用了很多類(lèi)似的設(shè)計(jì)模式,叫模板方法模式。簡(jiǎn)單講就是在父類(lèi)中寫(xiě)好,你要調(diào)用哪些方法,我在子類(lèi)中去實(shí)現(xiàn),這樣就按照了父類(lèi)的邏輯順序調(diào)用了相應(yīng)的方法,而且子類(lèi)可以有不同的實(shí)現(xiàn)。

好,下面我么就找哪個(gè)子類(lèi)實(shí)現(xiàn)了這個(gè)initServletBean方法吧,跟我走。。。

看看這個(gè)HttpServletBean的繼承體系如下

SpringMVC源碼分析

先找FrameworkServlet

我們尋尋覓覓,果然沒(méi)猜錯(cuò),方法的實(shí)現(xiàn),寫(xiě)在了子類(lèi),而且還不少,我來(lái)分析下吧

SpringMVC源碼分析

略過(guò)日志記錄往下走

調(diào)用了當(dāng)前類(lèi)中寫(xiě)的一個(gè)方法initWebApplicationContext方法,這個(gè)方法就很重要了,坐下來(lái),喝杯茶,慢慢品嘗spring這道美味可口的大餐。

先把源碼粘上來(lái),


第一步spring通過(guò)工具類(lèi)獲取父級(jí)WebApplicationContext容器,有的朋友問(wèn)了,這個(gè)父級(jí)容器哪來(lái)的,何時(shí)創(chuàng)建的。

就是在這個(gè)監(jiān)聽(tīng)器運(yùn)行的時(shí)候創(chuàng)建的,我們知道web服務(wù)器啟動(dòng)的時(shí)候,3大組件的創(chuàng)建順序是Listener>Filter >Servlet。

所以這里是可以獲取到父級(jí)容器的。當(dāng)然也可以獲取不到這種情況就不討論了,因?yàn)?,不可能說(shuō)你用springMVC而不用spring框架的。

SpringMVC源碼分析

這里有幾個(gè)if判斷,我已經(jīng)標(biāo)號(hào)了,給大家分析一下執(zhí)行流。

首先webApplicationContext一定是空的,為什么,因?yàn)槟銊倖?dòng),肯定是空的。所以第一個(gè)if暫時(shí)不會(huì)執(zhí)行。進(jìn)入到第二個(gè)if了,這里調(diào)用了findWebApplicationContext,其實(shí)這里也會(huì)返回一個(gè)null,從這個(gè)findwebApplicationContext名稱(chēng)就知道,它只查找并不創(chuàng)建。把源碼附上,大家看看

SpringMVC源碼分析

因此wac還是空的,所以進(jìn)入第三個(gè)if語(yǔ)句,我們進(jìn)到createWabApplicationContext方法中一探究竟。

SpringMVC源碼分析

這里的1號(hào)代碼塊中是日志,2號(hào)代碼塊中式判斷的,3號(hào)代碼塊是創(chuàng)建一個(gè)可配置的web應(yīng)用上下文,也就是web容器,4號(hào)代碼塊是初始化一下這個(gè)容器。比如設(shè)置之前的rootContext為父級(jí)容器。

最后把這個(gè)創(chuàng)建的容器返回,至此,我們的springMVC容器就這樣誕生了。但是還沒(méi)結(jié)束,在Framework的initWebApplicationContext()方法里還有if,我把它粘上來(lái)

接著之前的if序號(hào)編號(hào)

SpringMVC源碼分析

看看這個(gè)字段的初始值

SpringMVC源碼分析

所以這個(gè)onRefresh()方法是要執(zhí)行的,跟進(jìn)去發(fā)現(xiàn)空實(shí)現(xiàn),意料之內(nèi)的事啦,沒(méi)關(guān)系的,模板方法模式嘛,找子類(lèi),有線索,

SpringMVC源碼分析

這個(gè)方法又調(diào)用了一個(gè)initStrategies(。。)方法,這個(gè)方法干了什么勾當(dāng) ,跟進(jìn)去看看

這里我直接加上注釋了

SpringMVC源碼分析

這里我就只跟一個(gè)進(jìn)去看看吧,initMultipartResolver(context),進(jìn)去看看

SpringMVC源碼分析

注意我畫(huà)線的這個(gè)段代碼,大家考慮有沒(méi)有問(wèn)題啊,仔細(xì)思考哦

當(dāng)然有問(wèn)題,我們又沒(méi)有在容器中注入這個(gè)解析器,它怎么能get到呢,出鬼了。

嘻嘻

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

文章題目:SpringMVC源碼分析-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://jinyejixie.com/article14/dpcsge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)移動(dòng)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站、用戶(hù)體驗(yàn)、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

泸西县| 万山特区| 永修县| 呼图壁县| 莲花县| 莲花县| 德惠市| 澜沧| 四川省| 宜良县| 于都县| 曲沃县| 广安市| 漠河县| 岑溪市| 托克逊县| 枝江市| 安宁市| 五家渠市| 木兰县| 蚌埠市| 高安市| 封开县| 娄底市| 新丰县| 五河县| 鸡东县| 历史| 资阳市| 汕头市| 高密市| 明光市| 大港区| 康定县| 石楼县| 静宁县| 云阳县| 驻马店市| 新蔡县| 图木舒克市| 西乌珠穆沁旗|