麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

SpringMVCframework深入總體分析

2019-11-18 13:49:35
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

 在當(dāng)今的MVC framework里,似乎Webwork2逐漸成為主流, Webwork2+SPRingFramework的組合變得越來(lái)越流行。這似乎意味著Spring自帶的MVC framework遠(yuǎn)比Webwork2差,所以大家紛紛用Webwork2來(lái)代替。確實(shí),Spring的MVC framework不算是整個(gè)Spring的核心部件,但它的威力卻超過(guò)了很多人的想象。很多人包括xiecc認(rèn)為Spring的MVC framework是非常優(yōu)秀的,甚至比Webwork2更優(yōu)秀。


 下面列舉一下Spring的MVC framework在設(shè)計(jì)時(shí)做出的一些重要的決定,并將之和相關(guān)的MVC framework如Webwork2或struts進(jìn)行對(duì)比:


 一、Spring的整個(gè)MVC配置是基于IOC容器的


 與struts或webwork2相比,這是一個(gè)ms有點(diǎn)希奇的決定,看一下Spring MVC的配置文件,最先看到的不是action或者form,而是一些有著特定名字的bean,Bean下面的配置是一些簡(jiǎn)單或有點(diǎn)復(fù)雜的屬性。我們看到的是機(jī)器更輕易的數(shù)據(jù)結(jié)構(gòu),而不是人更輕易理解的元素。


 但是這恰恰是Spring的MVC強(qiáng)大的根源!因?yàn)樗呐渲镁褪荢pring的核心IOC容器的配置,這意味著所有IOC容器的威力都可以在這里展現(xiàn),我們可以為所欲為地對(duì)Spring MVC進(jìn)行擴(kuò)展和增強(qiáng),我們可以完成在其它MVC framwork中很多難以想象的任務(wù)。想擴(kuò)展新的URL映射方式嗎?要換一個(gè)themeResolver或LocalReolver的實(shí)現(xiàn)嗎?想在頁(yè)面中顯示新類型的View(比如說(shuō)RDF,呵呵,一個(gè)小秘密:xiecc是研究語(yǔ)義網(wǎng)的,雖然成天不務(wù)正業(yè),不寫論文,只寫八卦)?甚至想直接在Controller里定義AOP嗎?這些對(duì)Spring的MVC來(lái)說(shuō)都是小菜一碟。


 我沒(méi)有仔細(xì)研究過(guò)Webwork2的擴(kuò)展機(jī)制,我知道通過(guò)Webwork2的interceptor機(jī)制,可以進(jìn)行很多的擴(kuò)展,甚至有一個(gè)簡(jiǎn)單簡(jiǎn)單的IOC容器。但不管它有多強(qiáng)大,提供了多少擴(kuò)展點(diǎn)。它的威力都很難和真正的IOC容器相比。而struts的plugin功能則是出名的濫,雖然它也提供了plugin機(jī)制。


 Spring采用IOC配置的另一個(gè)原因是使Spring的MVC與Spring的IOC容器的整合變得非常的輕易。Spring提供了與struts與webwork2的整合,但是這樣整合都需要在進(jìn)行間接的包裝,感覺(jué)總不是很自然。而且還會(huì)導(dǎo)致一個(gè)概念多個(gè)配置,webwork2就需要在Spring里配置bean,再配置自己的xwork文件。想象一下吧,我們的bean直接就是一個(gè)controller,直接可以完成MVC的所有任務(wù),這是多少爽的感覺(jué)。


 Rod Johnson采用IOC容器來(lái)實(shí)現(xiàn)的另一個(gè)原因是這會(huì)減少好多開(kāi)發(fā)工作量??匆幌聈rlMapping吧,它提供的property本身就是一個(gè)HashMap,只有配置完成,我們的bean里的數(shù)據(jù)就自然存在了,哈哈,好爽吧。不用象struts那樣解析xml,再把它的內(nèi)容一項(xiàng)一項(xiàng)地讀到HashMap里。


 雖然這樣的配置會(huì)有點(diǎn)怪異,但假如我們對(duì)Spring的IOC容器非常熟悉的話,會(huì)發(fā)現(xiàn)它非常的親切,也非常的簡(jiǎn)單。


 最后是一個(gè)簡(jiǎn)單的小秘密,Spring怎么知道某個(gè)bean的配置就是urlMapping?另一個(gè)bean的配置就是viewResolver?其實(shí)很簡(jiǎn)單,把所有的bean全部讀到內(nèi)存里,然后通過(guò)bean的名字或類型去找就行了。通過(guò)名字去找就是簡(jiǎn)單的getBean方法,通過(guò)類型去找則使用了BeanFactoryUtils.beansOfTypeIncludingAncestors的靜態(tài)方法。


 二、Spring提供了明確的Model, View概念和相應(yīng)的數(shù)據(jù)結(jié)構(gòu)


 在Spring里有一個(gè)有趣的數(shù)據(jù)類型叫做ModelAndView,它只是簡(jiǎn)單地把要顯示的數(shù)據(jù)和顯示的結(jié)果封裝在一個(gè)類里。但是它卻提供了明確的MVC概念,尤其是model概念的強(qiáng)化,使程序的邏輯變得更清楚了。


 記得以前在Struts里寫程序里的時(shí)候,為了顯示數(shù)據(jù)經(jīng)常自己把東西放到Httpsession或HttpServletRequest里(或set到form里,雖然不太有用),這造成了model概念的模糊,而且也導(dǎo)致了struts與jsp頁(yè)面的緊耦合。假如我們要替換成Veloctiy,就得另外加一個(gè)plugin,因?yàn)樵趘elocity里數(shù)據(jù)是不需要不放到request里的。


 Webwork2里強(qiáng)調(diào)的是與Web framework解耦和它的command模式的簡(jiǎn)單性,因此在它的action里只有簡(jiǎn)單的get或set方法,假如返回?cái)?shù)據(jù),也只是簡(jiǎn)單地返回一個(gè)String.當(dāng)然這樣的實(shí)現(xiàn)有它的好處,但是它淡化了model和view的概念。Rod Johnson認(rèn)為Webwork2里的Action同時(shí)包含了Action和Model的職責(zé),這樣一個(gè)類的職責(zé)太多,不是一個(gè)很好的設(shè)計(jì)。當(dāng)然Jason Carreira不太認(rèn)同這種觀點(diǎn),因?yàn)锳ction里的model對(duì)象完成可以delege給其它對(duì)象。但不管怎樣,這種爭(zhēng)論的根源在于Webwork2里淡化了model, view甚至web的概念。仁者見(jiàn)仁,智者見(jiàn)智,最后的結(jié)果還是看個(gè)人喜歡好吧。


 三、Spring的Controller是Singleton的,或者是線程不安全的


 和Struts一樣,Spring的Controller是Singleton的,這意味著每個(gè)request過(guò)來(lái),系統(tǒng)都會(huì)用原有的instance去處理,這樣導(dǎo)致了兩個(gè)結(jié)果:我們不用每次創(chuàng)建Controller,減少了對(duì)象創(chuàng)建和垃圾收集的時(shí)間;由于只有一個(gè)Controller的instance,當(dāng)多個(gè)線程調(diào)用它的時(shí)候,它里面的instance變量不是線程安全的。




發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品国产一区二区三区四区阿崩 | 色综合久久久久久久粉嫩 | 欧美成a人片在线观看久 | 国产精品亚洲三区 | 久久久久国产成人精品亚洲午夜 | 精品无吗乱吗av国产爱色 | 精品xxxx户外露出视频 | 欧美大片一级毛片 | 欧美一级美片在线观看免费 | 国产一级免费片 | 一区二区三区小视频 | 精品一区二区免费 | 99成人在线 | 激情在线视频 | 91看片成人 | 欧美aaa| 一级黄色影片在线观看 | 国产88久久久国产精品免费二区 | 欧美一级爱爱 | 色骚综合 | xfplay噜噜av | 欧美在线中文字幕 | 久久av免费 | 久久久久久久久久91 | 午夜精品在线视频 | 黄色免费入口 | 色播视频在线播放 | 国产乱淫av | 中文字幕www. | 精品国产一区二区三区久久久 | 国产精品亚洲一区二区三区在线观看 | 欧美成人一区二区三区 | 夜添久久精品亚洲国产精品 | 九一传媒在线观看 | 黄wwww| 日韩视频在线观看免费视频 | xxxx8| 国产一区二区高清在线 | 91麻豆精品国产91久久久无需广告 | 日韩黄色免费在线观看 | 国产一级在线观看视频 |