手把手教你寫一個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)創建好的項目內容如下圖:
(2)pom文件的初始狀態如下:
第2步:搭建主體框架
PS:一個正常的spring項目一般分為controller和service部分,此處暫時忽略數據庫鏈接
(1)其中,TestController實現功能,返回name+“Hello World!”,引用TestService
(2)而TestService和TestServiceImpl則分別實現功能
第3步:創建,並打上標簽
PS:我們需要很多標簽,如service,controller,還有autowired等
(1)創建各種標簽(暫時創建這些標簽,後面不夠再加)
(2)打上標簽
由於RequestMpping後面需要跟路徑,所以此處需要重寫其value()方法,如下:
第4步:進入正題,創建一個DisPatcherServlet類,用於實現IOC容器功能
(1)DisPatcherServlet繼承HttpServlet(註意添加依賴),並重寫doGet,doPost方法
(2)創建一個doDispatcher方法,並被doPost引用
第5步:初始化
(1)暫停實現doDispatcher,去重寫初始化方法init,初始化共分為五大步驟,如下
註意:頂端要加上屬性類(Properties),且要resource中加application.properties,並加上scanPackage屬性,內容為需掃描的根目錄
(2)加載配置文件實現,需要先配置一個web.xml,路徑和內容如下:
路徑:
內容:
剩下的內容,大傢應該能看懂的吧
(3)下一步,使用遞歸,將所有class的路徑存入一個集合(classPaths)裡面
(4)下一步,將打上瞭controller和service標簽的類放入ioc容器中
(5)下一步,註入(通過Autowired標簽從IOC容器中獲取實例對象並賦值)
(6)獲取所有的RequestMapping內容,並寫到一個對象集合中
第6步:回頭實現doDisPatcher的步驟
(1)首先,設定404(class notfound)
(2)後面一半,實現接口功能
PS1:判斷url方法
PS2:根據url獲取方法
PS3:獲取方法下的所有參數
最後一步:執行tomcat
…
so,
(1)你以為以上的內容是對的嘛?
(2)你以為你能得到想要的結果嗎?
太天真瞭!!!
如果你按照我說的方法去運行,恭喜你,得到的結果是not found!!!真正的挑戰才剛剛開始:
第一,標簽類的定義,如下,特別重要的是Target
還需要補充一個mapping
第二,TestController類中,RequestParam少瞭value屬性,如果沒有,則無法傳值。
第三,那麼參數初始化,是不是也有一點問題呢?註意這段代碼,傳參的名字應該和什麼相關?
好瞭 現在真的可以成功瞭~~~
看看結果吧。
完結撒花~~~
到此這篇關於手把手教你寫一個spring IOC容器的文章就介紹到這瞭,更多相關spring IOC容器內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- None Found