使用springboot已經3年了,是該好好總結下了
從本質來說springboot就是spring,它去掉了spring繁瑣的xml配置,只需少量配置即可。
(1)去配置化,簡便開發
(2)提供嵌入式http伺服器,如tomcat,可以輕鬆地開發和測試
(3)提供命令列介面(cli)工具,可用於開發和測試
傳統mvc模式開發會直接返回給客戶端乙個檢視,但是restful web服務返回json形式(前後端分離)
starters可以理解為啟動器,它包含了一系列可以整合到應用裡面的依賴包,你可以一站式整合 spring 及其他技術,而不需要到處找示例**和依賴包。如你想使用 spring jpa 訪問資料庫,只要加入 spring-boot-starter-data-jpa 啟動器依賴就能使用了。
starters包含了許多專案中需要用到的依賴,它們能快速持續的執行,都是一系列得到支援的管理傳遞性依賴
public static void main(string args) }
(2)探索 classloader類載入機制-springbootloader
打包時它使用了 fatjar 技術將所有的依賴 jar 包一起放進了最終的 jar 包中的 boot-inf/lib 目錄中,當前專案的 class 被統一放到了 boot-inf/classes 目錄中。
在執行機制上,使用 fatjar 技術執行程式是需要對 jar 包進行改造的,它還需要自定義自己的 classloader 來載入 jar 包裡面 lib 目錄中巢狀的 jar 包中的類
疑問:當 jvm 遇到乙個不認識的類,boot-inf/lib 目錄裡又有那麼多 jar 包,它是如何知道去哪個 jar 包裡載入呢?
rootclassloader 就是雙親委派模型裡的 extensionclassloader ,jvm 內建的類會優先使用它來載入。如果不是內建的就去查詢這個類對應的 package。
classloader 會在本地快取包名和 jar包路徑的對映關係,如果快取中找不到對應的包名,就必須去 jar 包中挨個遍歷搜尋,這個就比較緩慢了。不過同乙個包名只會搜尋一次,下一次就可以直接從快取中得到對應的內嵌 jar 包路徑。
(3)controller 自動註冊
controller 沒有被**引用,它是如何註冊到 tomcat 服務中去的?——它靠的是註解傳遞機制。
springboot 深度依賴註解來完成配置的自動裝配工作,它自己發明了幾十個註解。
b、springboot 在遇到 componentscan 註解時會掃瞄對應包路徑下面的所有 class,根據這些 class 上標註的其它註解繼續進行後續處理。當它掃到controller 類時發現它標註了restcontroller註解,而 restcontroller 註解又標註了controller註解。
c、springboot 對 controller 註解進行了特殊處理,它會將 controller 註解的類當成 url 處理器註冊到 servlet 的請求處理器中,在建立 tomcat server 時,會將請求處理器傳遞進去。controller 就是如此被自動裝配進 tomcat 的。
....待更新
使用springMvc模擬springboot
springmvc 1,新增jar依賴 2,非web環境,程式的入口在main方法入口,而main函式的入口在listener中。初始化順序是listener先於filter先於servlet。因此要新增乙個listner。這裡就有疑問了,難道時至今日,我們還要去在web.xml中去新增listen...
期末系列之spring
spring 分層架構的七個模組 spring core 核心容器 提供spring框架基本功能,定義了建立 配置 管理bean的方式 spring context 上下文 向spring框架提供上下文資訊 spring aop 整合面向切面程式設計,為基於spring的應用程式物件提供事務管理服務...
Spring學習系列(一)
1.1 spring框架圖 1 spring core 提供了spring框架的核心功能。beanfactory是spring核心容器的主要元件。2 spring context 向spring框架提供上下文資訊。構建在beanfactory之上,增加了國際化 資源訪問等功能。3 spring ao...