[toc] # spring系列 ## 大概介紹 ### spring Spring是一個開源的容器框架,可以接管web層,Service層,Dao層,持久化框架的組件 可以配置各種bean和維護bean與bean之間的關係,其核心就是IOC(控制反轉),AOP(特性導向) 簡單來說就是一個分層的輕量化開源框架。 ![image](https://hackmd.io/_uploads/HkG2BCASp.png) ![image](https://hackmd.io/_uploads/SkWaH0CST.png) ### spring MVC 模型(Model)、視圖(View)和控制器(Controller)其核心將輸入邏輯,業務邏輯和UI邏輯分離 Spring框架中基於web的mvc架構所建立的網頁框架,依上圖運作模式,front Controller會依據使用者請求URL決定處理的Controller,並回傳ModelAndView的資料,接者dispatcher Servlet藉由view Resolver與ModelAndView將頁面顯示;Bean的設定主要基於XML、Java Configuration,不過讓人卻步的點就是繁雜的設定檔,讓初學者感到頭痛。 ### Spring Boot 為了解決Spring MVC中設定檔過度繁雜的問題,以及python-flask、node.js這些輕量級的框架的影響,於是社群建立了Spring boot框架,主要的特色為auto-configuration、更靈活的方式控制Bean,除了降低建立專案複雜度,也增加管理bean的靈活度;而各個starter也使得dependence的管理更有效率。 ![image](https://hackmd.io/_uploads/ByTuF00Ha.png) ![image](https://hackmd.io/_uploads/HkrRKA0Hp.png) ## 名詞整理 ### 什麼是spring bean bean代指被IOC管理的對象,透過配置可以告訴IOC管理哪些對象 ### bean的生命週期 bean的生命週期指的是bean在IOC中從創建到銷毀的過程 主要有5個流程 1. 實例化:為bean分配空間 2. 設置屬性:將bean進行注入和裝配 3. 初始化: 1-執行各種通知 2-初始化的前置方法 3-初始化方法 4-初始化的後置方法 5. 使用bean 6. 銷毀bean ### MVC的工作原理 1. 瀏覽器發送請求 DispatcherServlet攔截請求 2. DispatcherServlet 根據訊息調用HandlerMappingHandlerMapping根據URL去匹配能處理的Handler(Controller)並將涉及到的攔截器和handler一起封裝 3. DispatcherServlet 調用 HandlerAdapter執行 Handler 。 4. Handler 完成對使用者要求的處理後,會傳回一個 ModelAndView 物件給DispatcherServlet,ModelAndView 顧名思義,包含了資料模型以及對應的視圖的資訊。 Model 是傳回的資料對象,View 是個邏輯上的 View 5. ViewResolver 會根據邏輯 View 尋找實際的 View。 6. DispaterServlet 把回傳的 Model 傳給 View(視圖渲染) 7. 把 View 回傳給請求者(瀏覽器) ![image](https://hackmd.io/_uploads/r17WUA0S6.png)