手把手教你寫(xiě)一個(gè)spring IOC容器的方法
本文分享自華為云社區(qū)《手把手教你寫(xiě)一個(gè)spring IOC容器》,原文作者:技術(shù)火炬手。
spring框架的基礎(chǔ)核心和起點(diǎn)毫無(wú)疑問(wèn)就是IOC,IOC作為spring容器提供的核心技術(shù),成功完成了依賴(lài)的反轉(zhuǎn):從主類(lèi)的對(duì)依賴(lài)的主動(dòng)管理反轉(zhuǎn)為了spring容器對(duì)依賴(lài)的全局控制。今天就帶大家手寫(xiě)一個(gè)spring IOC容器。
第0步(準(zhǔn)備工作):(1)JDK1.8及java環(huán)境變量(2)maven包及maven環(huán)境變量(3)idea
第1步(創(chuàng)建項(xiàng)目,引入tomcat包)
PS:由于該項(xiàng)目的作用是模擬spring的部分功能,所以取名為spring
(1)創(chuàng)建好的項(xiàng)目?jī)?nèi)容如下圖:
(2)pom文件的初始狀態(tài)如下:
PS:一個(gè)正常的spring項(xiàng)目一般分為controller和service部分,此處暫時(shí)忽略數(shù)據(jù)庫(kù)鏈接
(1)其中,TestController實(shí)現(xiàn)功能,返回name+“Hello World!”,引用TestService
(2)而TestService和TestServiceImpl則分別實(shí)現(xiàn)功能
PS:我們需要很多標(biāo)簽,如service,controller,還有autowired等
(1)創(chuàng)建各種標(biāo)簽(暫時(shí)創(chuàng)建這些標(biāo)簽,后面不夠再加)
(2)打上標(biāo)簽
由于RequestMpping后面需要跟路徑,所以此處需要重寫(xiě)其value()方法,如下:
(1)DisPatcherServlet繼承HttpServlet(注意添加依賴(lài)),并重寫(xiě)doGet,doPost方法
(2)創(chuàng)建一個(gè)doDispatcher方法,并被doPost引用
(1)暫停實(shí)現(xiàn)doDispatcher,去重寫(xiě)初始化方法init,初始化共分為五大步驟,如下
注意:頂端要加上屬性類(lèi)(Properties),且要resource中加application.properties,并加上scanPackage屬性,內(nèi)容為需掃描的根目錄
(2)加載配置文件實(shí)現(xiàn),需要先配置一個(gè)web.xml,路徑和內(nèi)容如下:
路徑:
內(nèi)容:
剩下的內(nèi)容,大家應(yīng)該能看懂的吧
(3)下一步,使用遞歸,將所有class的路徑存入一個(gè)集合(classPaths)里面
(4)下一步,將打上了controller和service標(biāo)簽的類(lèi)放入ioc容器中
(5)下一步,注入(通過(guò)Autowired標(biāo)簽從IOC容器中獲取實(shí)例對(duì)象并賦值)
(6)獲取所有的RequestMapping內(nèi)容,并寫(xiě)到一個(gè)對(duì)象集合中
第6步:回頭實(shí)現(xiàn)doDisPatcher的步驟(1)首先,設(shè)定404(class notfound)(2)后面一半,實(shí)現(xiàn)接口功能PS1:判斷url方法PS2:根據(jù)url獲取方法PS3:獲取方法下的所有參數(shù)
最后一步:執(zhí)行tomcat…
so,
(1)你以為以上的內(nèi)容是對(duì)的嘛?(2)你以為你能得到想要的結(jié)果嗎?
太天真了!!!
如果你按照我說(shuō)的方法去運(yùn)行,恭喜你,得到的結(jié)果是not found!!!真正的挑戰(zhàn)才剛剛開(kāi)始:
第一,標(biāo)簽類(lèi)的定義,如下,特別重要的是Target
還需要補(bǔ)充一個(gè)mapping
第二,TestController類(lèi)中,RequestParam少了value屬性,如果沒(méi)有,則無(wú)法傳值。
第三,那么參數(shù)初始化,是不是也有一點(diǎn)問(wèn)題呢?注意這段代碼,傳參的名字應(yīng)該和什么相關(guān)?
好了 現(xiàn)在真的可以成功了~~~
看看結(jié)果吧。
完結(jié)撒花~~~
到此這篇關(guān)于手把手教你寫(xiě)一個(gè)spring IOC容器的文章就介紹到這了,更多相關(guān)spring IOC容器內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. python實(shí)現(xiàn)讀取類(lèi)別頻數(shù)數(shù)據(jù)畫(huà)水平條形圖案例2. 概述IE和SQL2k開(kāi)發(fā)一個(gè)XML聊天程序3. 詳解JSP 內(nèi)置對(duì)象request常見(jiàn)用法4. 使用Spry輕松將XML數(shù)據(jù)顯示到HTML頁(yè)的方法5. chat.asp聊天程序的編寫(xiě)方法6. 利用CSS3新特性創(chuàng)建透明邊框三角7. JSP的Cookie在登錄中的使用8. ASP實(shí)現(xiàn)加法驗(yàn)證碼9. CSS3實(shí)現(xiàn)動(dòng)態(tài)翻牌效果 仿百度貼吧3D翻牌一次動(dòng)畫(huà)特效10. asp批量添加修改刪除操作示例代碼
