MyMVC框架功能描述

分層:

將包分為entity dao service action四層

每層中的類(lèi)依次都有以下注解:

@BeanType(type=BeanTypeEnum.Entity)

@BeanType(type=BeanTypeEnum.Repository)

@BeanType(type=BeanTypeEnum.Service)

@BeanType(type=BeanTypeEnum.Controller)


自動(dòng)裝配bean:

1. 類(lèi)信息包裝類(lèi)BeanClassWrapper:

功能

裝載bean的屬性,產(chǎn)生一個(gè)裝配完畢的bean對(duì)象

查找方法(包括本類(lèi)所有方法和父類(lèi)public方法)

查找屬性(包括本類(lèi)所有屬性和父類(lèi)public屬性)

獲得bean注解

clazz:類(lèi)Class

methodsMap :方法map李破,用于快速查找方法(包括本類(lèi)所有方法和父類(lèi)public方法)

fieldsMap:屬性map北发,用于查找屬性(包括本類(lèi)所有屬性和父類(lèi)public屬性)

fieldList:屬性list,用于遍歷屬性(包括本類(lèi)所有屬性和父類(lèi)public屬性)

tableName:對(duì)應(yīng)的數(shù)據(jù)庫(kù)表名

beanType:bean類(lèi)型注解喷屋,用于確定該包裝器對(duì)應(yīng)bean屬于哪一層

2. 監(jiān)聽(tīng)器 BeanLoader

當(dāng)web應(yīng)用啟動(dòng)的時(shí)候掃描src包下的所有子包琳拨,根據(jù)他們的beanType注解值來(lái)進(jìn)行裝配到BeanContainer中的靜態(tài)MAP


如果是entity和controller,則保存相應(yīng)的beanClassWrapper屯曹,每次需要就取出再用newInstance創(chuàng)建新的實(shí)體

如果是repository和service狱庇,則保存相應(yīng)的dao和service bean對(duì)象,創(chuàng)建他們的bean對(duì)象恶耽,遍歷其中的fieldList密任,若注解Autowired不為空,則根據(jù)field的名字調(diào)用BeanContainer的靜態(tài)getbean方法偷俭,將相應(yīng)的屬性注入到bean浪讳,然后保存bean到Map

值得注意的是,在進(jìn)行掃描裝配時(shí)涌萤,要按entity-->dao-->service-->action的順序淹遵,因?yàn)楹竺娴腷ean會(huì)把前面的bean作為屬性

至此,bean自動(dòng)裝配完畢


處理請(qǐng)求:controller層

路由配置文件:mvc.cfg.properties? :? url = clazz.method

中央分發(fā)器:DispatcherServlet

分發(fā)器擁有一個(gè)屬性Properties prop负溪,在init方法中進(jìn)行初始化透揣,將mvc.cfg.properties映射成prop對(duì)象

每次接收到請(qǐng)求時(shí),導(dǎo)向到doPost方法中進(jìn)行處理

1. 獲取servletURI

1.5 將request response存入到BeanContainer中的靜態(tài)MAP中

2.通過(guò)uri獲取需要調(diào)用的類(lèi)的類(lèi)名和方法名

3.通過(guò)類(lèi)名調(diào)用getBean獲取相應(yīng)的BeanClassWrapper

4.通過(guò)BCW獲得裝配好的bean

5.向裝配好的bean中注入前端請(qǐng)求中的參數(shù)(parameterMap)

6.通過(guò)BCW獲得需要調(diào)用的方法和Class

7.invoke調(diào)用相應(yīng)的方法

8.根據(jù)action的返回川抡,判斷方法responseType(JSON TEXT STREAM VIEW)注解的值辐真,進(jìn)行相應(yīng)的處理


Action類(lèi)

通用屬性在CommonAction中定義


page pageSize 分頁(yè)信息

sortby order 排序信息


其他屬性按照相應(yīng)的實(shí)體類(lèi)中的屬性來(lái)定義,用于接收參數(shù)

分為 EQUAL ?LIKE ?RANGE 三種類(lèi)型

分別代表精確匹配 模糊匹配 范圍匹配

向service層傳入action類(lèi)this應(yīng)用,根據(jù)action類(lèi)的屬性注解類(lèi)型和值用反射技術(shù)自動(dòng)生成增刪查改sql語(yǔ)句

將service的返回封裝成JSON對(duì)象返回給DispatcherServlet


Service層

僅擁有一個(gè)對(duì)應(yīng)的dao對(duì)象侍咱,并帶有autowired注解

調(diào)用相應(yīng)的dao實(shí)現(xiàn)業(yè)務(wù)邏輯

根據(jù)dao的增刪查改結(jié)果進(jìn)行相應(yīng)的業(yè)務(wù)邏輯處理耐床,構(gòu)造返回給action層


dao層繼承CommonDao類(lèi)

擁有一個(gè)beanClassWrapper對(duì)象

有g(shù)etCurrentSession()方法獲取DbSession類(lèi)(類(lèi)似JDBCTemplate)

DbSession對(duì)象綁定到了ThreadLocal

每個(gè)dao類(lèi)都有增刪查改方法,自動(dòng)生成sql語(yǔ)句

在從數(shù)據(jù)庫(kù)獲取結(jié)果后楔脯,裝配到entity視圖類(lèi)返回

查詢方法在數(shù)據(jù)庫(kù)的返回結(jié)果有兩種類(lèi)型咙咽,

一種是List<Map>視圖實(shí)體列表;

一種是Map 單個(gè)視圖實(shí)體

裝配過(guò)程用反射技術(shù),將map中屬性裝入到entity中




返回給service

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末淤年,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蜡豹,更是在濱河造成了極大的恐慌麸粮,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镜廉,死亡現(xiàn)場(chǎng)離奇詭異弄诲,居然都是意外死亡隧出,警方通過(guò)查閱死者的電腦和手機(jī)啡彬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)体捏,“玉大人塔插,你說(shuō)我怎么就攤上這事梗摇。” “怎么了想许?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵伶授,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我流纹,道長(zhǎng)糜烹,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任漱凝,我火速辦了婚禮疮蹦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茸炒。我一直安慰自己愕乎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布壁公。 她就那樣靜靜地躺著妆毕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贮尖。 梳的紋絲不亂的頭發(fā)上笛粘,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼薪前。 笑死润努,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的示括。 我是一名探鬼主播铺浇,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼垛膝!你這毒婦竟也來(lái)了鳍侣?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吼拥,失蹤者是張志新(化名)和其女友劉穎倚聚,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體凿可,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惑折,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了枯跑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惨驶。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖敛助,靈堂內(nèi)的尸體忽然破棺而出粗卜,到底是詐尸還是另有隱情,我是刑警寧澤纳击,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布休建,位于F島的核電站,受9級(jí)特大地震影響评疗,放射性物質(zhì)發(fā)生泄漏测砂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一百匆、第九天 我趴在偏房一處隱蔽的房頂上張望砌些。 院中可真熱鬧,春花似錦加匈、人聲如沸存璃。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)纵东。三九已至,卻和暖如春啥寇,著一層夾襖步出監(jiān)牢的瞬間偎球,已是汗流浹背洒扎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衰絮,地道東北人袍冷。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像猫牡,于是被迫代替她去往敵國(guó)和親胡诗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評(píng)論 6 342
  • 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
    SnailTyan閱讀 4,128評(píng)論 2 7
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理淌友,服務(wù)發(fā)現(xiàn)煌恢,斷路器,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法震庭,類(lèi)相關(guān)的語(yǔ)法瑰抵,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法归薛,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,587評(píng)論 18 399
  • 1匪蝙、Spring MVC請(qǐng)求流程 (1)初始化:(對(duì)DispatcherServlet和ContextLoderL...
    拾壹北閱讀 1,946評(píng)論 0 12