天天看點

slf4j需要什麼jar包_「源碼解析」憑什麼?spring boot 一個 jar 就能開發 web 項目問題依賴spring-boot-starter(重要)spring-boot-autoconfigurespring-boot-starter-tomcatspring-boot-starter-jsonspring-boot-starter-validation參考資料

slf4j需要什麼jar包_「源碼解析」憑什麼?spring boot 一個 jar 就能開發 web 項目問題依賴spring-boot-starter(重要)spring-boot-autoconfigurespring-boot-starter-tomcatspring-boot-starter-jsonspring-boot-starter-validation參考資料

問題

為什麼開發web項目,spring-boot-starter-web 一個jar就搞定了?這個jar做了什麼?

通過 spring-boot 工程可以看到所有開箱即用的的引導子產品 spring-boot-starter-xxx 都在 spring-boot-starters 子子產品中,且所有的 spring-boot-starter-xxx 子產品中都沒有代碼,都是在其他包中就完成對應的功能。首先,分析其依賴

依賴

slf4j需要什麼jar包_「源碼解析」憑什麼?spring boot 一個 jar 就能開發 web 項目問題依賴spring-boot-starter(重要)spring-boot-autoconfigurespring-boot-starter-tomcatspring-boot-starter-jsonspring-boot-starter-validation參考資料

注意:圖中的 Jakarta.xxxx 包是原來的 javax.xxxx 包,Java EE 改名為 Jakarta EE 了,spring-boot-starter-web-2.1.8.RELEASE 版本是直接依賴于hibernate-validator,spring-boot-2.2.0 版本開始使用的是 Jakarta,并用一個新子產品 spring-boot-starter-validation 來管理

從依賴圖中可以看到,最核心的 spring-boot 依賴于 spring-context 和 spring-core ,是以,正如官方所說,spring-boot 是基于 spring 的。

spring boot可以輕松地建立可運作的、獨立的、生産級的基于spring的應用程式。我們對spring平台和第三方庫有自己的見解,這樣您就可以從最少的麻煩開始了。大多數spring引導應用程式隻需要很少的spring配置。

可以使用 Spring Boot 建立Java應用程式,Java應用程式可以通過使用 java -jar 或更傳統的war 來部署。我們還提供了一個運作“spring腳本”的指令行工具。

我們首要的目标是:

* 為所有spring開發提供一個更快、更容易獲得的入門體驗。

* 開箱即用,但要在需求開始偏離預設值時迅速改變。

* 提供一系列對大型項目通用的非功能性特性(如嵌入式伺服器、安全性、流量、運作狀況檢查和外部化配置)。

* 絕對不需要代碼生成,也不需要XML配置。

「spring-boot 源碼解析」spring-boot 依賴管理

「spring-boot 源碼解析」spring-boot 依賴管理梳理圖

spring-boot-starter(重要)

此子產品是所有 spring-boot-starter-xxxx 引導器核心,非常重要!!!

包含以下子產品:

org.springframework.boot spring-bootorg.springframework.boot spring-boot-autoconfigureorg.springframework.boot spring-boot-starter-loggingjavax.annotation javax.annotation-apiorg.springframework spring-coreorg.yaml snakeyaml runtime
           

spring-boot

spring-boot 核心,spring-boot 特性功能都是在此包實作。

slf4j需要什麼jar包_「源碼解析」憑什麼?spring boot 一個 jar 就能開發 web 項目問題依賴spring-boot-starter(重要)spring-boot-autoconfigurespring-boot-starter-tomcatspring-boot-starter-jsonspring-boot-starter-validation參考資料

spring-boot-autoconfigure

spring-boot 自動配置,提供一些常用包的預設配置

「源碼解析」自動配置的這些細節不知道,别說你會 springboot

spring-boot-starter-logging

spring-boot 預設日志引導器

ch.qos.logback logback-classicorg.apache.logging.log4j log4j-to-slf4jorg.slf4j jul-to-slf4j
           

什麼都沒做,就引入了幾個依賴,那引入這幾個依賴解決了什麼問題呢?通過引入這幾個依賴,直接或間接的引入了 slf4j、logback日志架構所需jar,以及 log4j、jul日志工具對 Slf4j的适配。是以,引入了這個jar,工程中的日志實作使用 logback。嗯?那 log4j2 呢?原來如果想用 log4j2,還有一個 spring-boot-starter-log4j2 包供我們選擇。

日志的具體配置,建議還是用原本的 xml 配置,用 yaml 或 properties 不好配置。如:logback 使用根目錄下的 logback-spring.xml 配置。

snakeyaml

支援yaml文法的生成與解析工具包

https://www.jianshu.com/p/d8136c913e52

spring-boot-starter-tomcat

沒有做任何處理,直接使用嵌入式 tomcat 相關jar。spring 項目由外部 tomcat 調用 spring架構,而 spring-boot 是由 架構内部去調用嵌入式 tomcat,主被動關系發生了轉化。

javax.annotation javax.annotation-apiorg.apache.tomcat.embed tomcat-embed-core org.apache.tomcat tomcat-annotations-api org.apache.tomcat.embed tomcat-embed-elorg.apache.tomcat.embed tomcat-embed-websocket
           

spring-boot-starter-json

沒有做任何處理,使用 jackson 作為預設json工具

org.springframework.boot spring-boot-starterorg.springframework spring-webcom.fasterxml.jackson.core jackson-databindcom.fasterxml.jackson.datatype jackson-datatype-jdk8com.fasterxml.jackson.datatype jackson-datatype-jsr310com.fasterxml.jackson.module jackson-module-parameter-names
           

spring-boot-starter-validation

2.1.8.RELEASE 版本直接依賴于 hibernate-validator,沒有此子產品

2.2.0 版本依賴于 Jakarta.validation-api 和 hibernate-validator,并去掉了 hibernate-validator中的 javax.validation-api。

兩者在使用的時候沒有任何差別,是無感切換的。

validator 自動化校驗

jakarta.validation jakarta.validation-apiorg.apache.tomcat.embed tomcat-embed-elorg.hibernate.validator hibernate-validator javax.validation validation-api 
           

參考資料

  • spring-boot-2.1.8 源碼

繼續閱讀