您當前的位置:首頁 > 舞蹈

手把手教你寫一個spring IOC容器

作者:由 華為雲開發者社群 發表于 舞蹈時間:2021-04-08

摘要:

spring框架的基礎核心和起點毫無疑問就是IOC,IOC作為spring容器提供的核心技術,成功完成了依賴的反轉:從主類的對依賴的主動管理反轉為了spring容器對依賴的全域性控制。今天就帶大家手寫一個spring IOC容器。

本文分享自華為雲社群《手把手教你寫一個spring IOC容器》,原文作者:技術火炬手。

spring框架的基礎核心和起點毫無疑問就是IOC,IOC作為spring容器提供的核心技術,成功完成了依賴的反轉:從主類的對依賴的主動管理反轉為了spring容器對依賴的全域性控制。今天就帶大家手寫一個spring IOC容器。

第0步(準備工作):

(1)JDK1。8及java環境變數

(2)maven包及maven環境變數

(3)idea

第1步(建立專案,引入tomcat包)

PS:由於該專案的作用是模擬spring的部分功能,所以取名為spring

(1)建立好的專案內容如下圖:

手把手教你寫一個spring IOC容器

(2)pom檔案的初始狀態如下:

手把手教你寫一個spring IOC容器

第2步:搭建主體框架

PS:一個正常的spring專案一般分為controller和service部分,此處暫時忽略資料庫連結

手把手教你寫一個spring IOC容器

(1)其中,TestController實現功能,返回name+“Hello World!”,引用TestService

手把手教你寫一個spring IOC容器

(2)而TestService和TestServiceImpl則分別實現功能

手把手教你寫一個spring IOC容器

第3步:建立,並打上標籤

PS:我們需要很多標籤,如service,controller,還有autowired等

(1)建立各種標籤(暫時建立這些標籤,後面不夠再加)

手把手教你寫一個spring IOC容器

(2)打上標籤

手把手教你寫一個spring IOC容器

手把手教你寫一個spring IOC容器

由於RequestMpping後面需要跟路徑,所以此處需要重寫其value()方法,如下:

手把手教你寫一個spring IOC容器

第4步:進入正題,建立一個DisPatcherServlet類,用於實現IOC容器功能

(1)DisPatcherServlet繼承HttpServlet(注意新增依賴),並重寫doGet,doPost方法

手把手教你寫一個spring IOC容器

(2)建立一個doDispatcher方法,並被doPost引用

手把手教你寫一個spring IOC容器

第5步:初始化

(1)暫停實現doDispatcher,去重寫初始化方法init,初始化共分為五大步驟,如下

手把手教你寫一個spring IOC容器

注意:頂端要加上屬性類(Properties),且要resource中加application。properties,並加上scanPackage屬性,內容為需掃描的根目錄

手把手教你寫一個spring IOC容器

(2)載入配置檔案實現,需要先配置一個web。xml,路徑和內容如下:

路徑:

手把手教你寫一個spring IOC容器

內容:

手把手教你寫一個spring IOC容器

剩下的內容,大家應該能看懂的吧

手把手教你寫一個spring IOC容器

(3)下一步,使用遞迴,將所有class的路徑存入一個集合(classPaths)裡面

手把手教你寫一個spring IOC容器

(4)下一步,將打上了controller和service標籤的類放入ioc容器中

手把手教你寫一個spring IOC容器

(5)下一步,注入(透過Autowired標籤從IOC容器中獲取例項物件並賦值)

手把手教你寫一個spring IOC容器

(6)獲取所有的RequestMapping內容,並寫到一個物件集合中

第6步:回頭實現doDisPatcher的步驟

手把手教你寫一個spring IOC容器

(1)首先,設定404(class notfound)

(2)後面一半,實現介面功能

PS1:判斷url方法

PS2:根據url獲取方法

PS3:獲取方法下的所有引數

最後一步:執行tomcat

so,

(1)你以為以上的內容是對的嘛?

(2)你以為你能得到想要的結果嗎?

太天真了!!!

如果你按照我說的方法去執行,恭喜你,得到的結果是not found!!!真正的挑戰才剛剛開始:

第一,標籤類的定義,如下,特別重要的是Target

手把手教你寫一個spring IOC容器

還需要補充一個mapping

手把手教你寫一個spring IOC容器

第二,TestController類中,RequestParam少了value屬性,如果沒有,則無法傳值。

手把手教你寫一個spring IOC容器

第三,那麼引數初始化,是不是也有一點問題呢?注意這段程式碼,傳參的名字應該和什麼相關?

手把手教你寫一個spring IOC容器

好了 現在真的可以成功了~~~

手把手教你寫一個spring IOC容器

看看結果吧。

手把手教你寫一個spring IOC容器

完結撒花~~~

點選關注,第一時間瞭解華為雲新鮮技術~

標簽: Spring  IOC  容器  標籤  依賴