1.Spring MVC工作流程

1柜裸、用戶發(fā)送請求至前端控制器DispatcherServlet
2缕陕、DispatcherServlet收到請求調(diào)用HandlerMapping處理器映射器。
3疙挺、處理器映射器找到具體的處理器扛邑,生成處理器對象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet。
4铐然、DispatcherServlet調(diào)用HandlerAdapter處理器適配器
5蔬崩、HandlerAdapter經(jīng)過適配調(diào)用具體的處理器(Controller,也叫后端控制器)搀暑。
6舱殿、Controller執(zhí)行完成返回ModelAndView
7、HandlerAdapter將controller執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet
8险掀、DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
9、ViewReslover解析后返回具體View
10湾宙、DispatcherServlet根據(jù)View進行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)樟氢。
11、DispatcherServlet響應(yīng)用戶
2. Spring是什么侠鳄,優(yōu)點
- 目的:解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性
- 功能:使用基本的JavaBean代替EJB埠啃,并提供了更多的企業(yè)應(yīng)用功能
- 范圍:任何Java應(yīng)用
簡單來說,Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架伟恶。
1. 輕量——從大小與開銷兩方面而言Spring都是輕量的碴开。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開銷也是微不足道的博秫。此外潦牛,Spring是非侵入式的:典型地,Spring應(yīng)用中的對象不依賴于Spring的特定類挡育。
2. 控制反轉(zhuǎn)——Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進了松耦合巴碗。當(dāng)應(yīng)用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來即寒,而不是這個對象自己創(chuàng)建或者查找依賴對象橡淆。你可以認(rèn)為IoC與JNDI相反——不是對象從容器中查找依賴召噩,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。
3. 面向切面——Spring提供了面向切面編程的豐富支持逸爵,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級服務(wù)(例如審計(auditing)和事務(wù)()管理)進行內(nèi)聚性的開發(fā)具滴。應(yīng)用對象只實現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識)其它的系統(tǒng)級關(guān)注點师倔,例如日志或事務(wù)支持构韵。
4. 容器——Spring包含并管理應(yīng)用對象的配置和生命周期,在這個意義上它是一種容器溯革,你可以配置你的每個bean如何被創(chuàng)建——基于一個可配置原型(prototype)贞绳,你的bean可以創(chuàng)建一個單獨的實例或者每次需要時都生成一個新的實例——以及它們是如何相互關(guān)聯(lián)的。然而致稀,Spring不應(yīng)該被混同于傳統(tǒng)的重量級的EJB容器冈闭,它們經(jīng)常是龐大與笨重的,難以使用抖单。
5. 框架——Spring可以將簡單的組件配置萎攒、組合成為復(fù)雜的應(yīng)用。在Spring中矛绘,應(yīng)用對象被聲明式地組合耍休,典型地是在一個XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理货矮、持久化框架集成等等)羊精,將應(yīng)用邏輯的開發(fā)留給了你。
所有Spring的這些特征使你能夠編寫更干凈囚玫、更可管理喧锦、并且更易于測試的代碼。它們也為Spring中的各種模塊提供了基礎(chǔ)支持抓督。