寫出我的第一個(gè)框架:迷你版Spring MVC

你沒有看錯(cuò)標(biāo)題,今天,我將實(shí)現(xiàn)我人生中第一個(gè)框架排龄,^_^

前期準(zhǔn)備

我這里要寫的是一個(gè)迷你版的Spring MVC,我將在一個(gè)干凈的web工程開始開發(fā)翎朱,不引入Spring橄维,完全通過JDK來實(shí)現(xiàn)。

我們先來看一眼工程:

工程代碼結(jié)構(gòu)

第一拴曲,在annotation包下争舞,我將提供自定義的注解,為了方便理解澈灼,就和Spring MVC保持一致竞川。

第二,為了模擬Spring MVC的方法調(diào)用鏈叁熔,我這里提供Controller/Service/Dao層進(jìn)行測(cè)試

第三委乌,提供自己的DispatcherServlet完成核心處理邏輯


關(guān)于自定義注解

JDK提供了幾個(gè)元注解,比如:

@Documented : JavaDoc文檔

@Target:標(biāo)志此注解可以修飾在哪些地方荣回,類遭贸,成員變量,方法...

@Retention:Annotation的生命周期驹马,一般情況下革砸,我們自定義注解的話除秀,顯然需要在運(yùn)行期獲取注解的一些信息糯累。

看一下我這邊的自定義注解:

模擬Spring MVC的@Controller注解


@Qualifier提供依賴注入


@RequestMapping提供URL地址處理映射


Dao層注解


Service層注解


編寫核心控制器:DispatcherServlet

在Spring MVC中,DispatcherServlet是核心册踩,下面我們來實(shí)現(xiàn)它泳姐。首先來說,Spring MVC中的DispatcherServlet說到底暂吉,還是HttpServlet的子類胖秒,因此我這邊自己的DispatcherSerlvet需要extends HttpServlet。

pom.xml:

提供servlet依賴

看DispatcherServlet的定義:

DispatcherServlet

@WebServlet是什么慕的?

其實(shí)阎肝,以前我們定義一個(gè)Servlet,需要在web.xml中去配置肮街,不過在Servlet3.0后出現(xiàn)了基于注解的Servlet风题。

仔細(xì)觀察,你會(huì)發(fā)現(xiàn),這個(gè)DispatcherServlet是自啟動(dòng)沛硅,而且傳入了一個(gè)參數(shù)眼刃。

要知道,在Spring MVC中摇肌,要想基于注解擂红,需要在配置中指明掃描的包路徑,就像這個(gè)樣子:

<context:component-scan base-package="com.zfz.myspringmvc">

</context:component-scan>

為了方便围小,我這里就通過初始化參數(shù)直接將需要掃描的基包路徑傳入昵骤。

init初始化處理:

init()

其實(shí),在init中肯适,我們主要是完成了什么呢涉茧?

第一,我們應(yīng)該去掃描基包下的類疹娶,得到信息A

第二伴栓,對(duì)于@Controller/@Service/@Repository注解而言,我們需要拿到對(duì)應(yīng)的名稱雨饺,并初始化它們修飾的類钳垮,形成映射關(guān)系B

第三,我們還得掃描類中的字段额港,如果發(fā)現(xiàn)有@Qualifier的話饺窿,我們需要完成注入

第四,我們還需要掃描@RequestMapping移斩,完成URL到某一個(gè)Controller的某一個(gè)方法上的映射關(guān)系C

其實(shí)肚医,Spring MVC的處理流程,就是類似這樣的向瓷!

掃描基包:

掃描基包

注意肠套,基包是X.Y.Z的形式,而URL是X/Y/Z的形式猖任,需要轉(zhuǎn)換你稚。

實(shí)例化:

實(shí)例化

從這里你可以看出,我們完成了被注解標(biāo)注的類的實(shí)例化朱躺,以及和注解名稱的映射刁赖。

依賴注入:

依賴注入

以前,我們總是說Spring IOC长搀,上面不就是在做這個(gè)事情么宇弛?

URL映射處理:

URL映射處理

URL,我們需要提取出來源请,映射到Controller的Method上枪芒。

doGet/doPost:

doGet/doPost

在doPost方法中轿钠,非常簡單,我們只需要提取出URL病苗,通過URL映射到Method上疗垛,然后通過反射的方式進(jìn)行調(diào)用即可。


Make it run硫朦!

Controller層:

UserController

Service層:

UserService


UserServiceImpl

Dao層:

UserDao


UserDaoImpl

運(yùn)行結(jié)果:

result


OK贷腕,到這里,一個(gè)迷你版的Spring MVC就開發(fā)完成了咬展,以前泽裳,都是用Spring MVC,從沒有想過可以自己開發(fā)一個(gè)出來破婆,這是我的第一次涮总,我的能量超乎我的想象,哈哈~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末祷舀,一起剝皮案震驚了整個(gè)濱河市瀑梗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌裳扯,老刑警劉巖抛丽,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饰豺,居然都是意外死亡亿鲜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門冤吨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒿柳,“玉大人,你說我怎么就攤上這事漩蟆±萏剑” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵爆安,是天一觀的道長叛复。 經(jīng)常有香客問我,道長扔仓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任咖耘,我火速辦了婚禮翘簇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘儿倒。我一直安慰自己版保,他們只是感情好呜笑,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著彻犁,像睡著了一般叫胁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上汞幢,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天驼鹅,我揣著相機(jī)與錄音,去河邊找鬼森篷。 笑死输钩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的仲智。 我是一名探鬼主播买乃,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼钓辆!你這毒婦竟也來了剪验?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤前联,失蹤者是張志新(化名)和其女友劉穎碉咆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛀恩,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疫铜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年瘸洛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岁钓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡血淌,死狀恐怖顽馋,靈堂內(nèi)的尸體忽然破棺而出谓厘,到底是詐尸還是另有隱情,我是刑警寧澤寸谜,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布竟稳,位于F島的核電站,受9級(jí)特大地震影響熊痴,放射性物質(zhì)發(fā)生泄漏他爸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一果善、第九天 我趴在偏房一處隱蔽的房頂上張望诊笤。 院中可真熱鬧,春花似錦巾陕、人聲如沸讨跟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晾匠。三九已至茶袒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凉馆,已是汗流浹背薪寓。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留句喜,地道東北人预愤。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像咳胃,于是被迫代替她去往敵國和親植康。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容