三分鐘帶你搞懂springboot原理
Spring Boot 簡(jiǎn)介
什么是 Spring Boot?
Spring Boot 是基于 Spring Framework 的一個(gè)開源 Java 基于 Spring 框架的快速開發(fā)框架,由 Pivotal 團(tuán)隊(duì)開發(fā)。它旨在簡(jiǎn)化 Spring 應(yīng)用的初始搭建以及開發(fā)過程。Spring Boot 的核心目標(biāo)是讓開發(fā)者能夠快速上手,減少配置,快速啟動(dòng)和運(yùn)行一個(gè)基于 Spring 的應(yīng)用。
Spring Boot 的主要特點(diǎn)
獨(dú)立運(yùn)行:Spring Boot 應(yīng)用內(nèi)嵌了 Tomcat、Jetty 或 Undertow 作為 Web 容器,無需部署 WAR 文件,直接運(yùn)行即可。
自動(dòng)配置:Spring Boot 根據(jù)添加的依賴自動(dòng)配置 Spring 和相關(guān)項(xiàng)目,例如添加 spring-boot-starter-web 依賴后,Spring Boot 會(huì)自動(dòng)配置 Tomcat 和 Spring MVC。
無需 XML 配置:Spring Boot 提倡使用 Java 配置替代傳統(tǒng)的 XML 配置,使得配置更加簡(jiǎn)潔、易懂。
微服務(wù)支持:Spring Boot 與 Spring Cloud 深度集成,支持微服務(wù)架構(gòu)的開發(fā),方便構(gòu)建分布式系統(tǒng)。
健康檢查和監(jiān)控:Spring Boot 提供了豐富的監(jiān)控和健康檢查功能,通過 actuator 模塊可以輕松監(jiān)控應(yīng)用的運(yùn)行狀態(tài)。
Spring Boot 原理詳解
Spring Boot 是基于 Spring 框架的快速開發(fā)工具,通過自動(dòng)配置和約定優(yōu)于配置的原則,簡(jiǎn)化了 Spring 應(yīng)用的開發(fā)流程。以下從核心原理、啟動(dòng)流程、自動(dòng)配置機(jī)制等方面詳細(xì)解析 Spring Boot 的工作原理。
一、Spring Boot 的核心原理
約定優(yōu)于配置
- Spring Boot 通過默認(rèn)配置減少開發(fā)者的配置工作量,例如默認(rèn)的嵌入式 Tomcat 服務(wù)器、默認(rèn)的配置文件路徑等。
- 開發(fā)者可以通過配置文件(如
application.properties或application.yml)覆蓋默認(rèn)配置。
自動(dòng)配置(Auto-Configuration)
- Spring Boot 根據(jù)項(xiàng)目的依賴自動(dòng)配置 Spring 應(yīng)用程序。例如,如果項(xiàng)目中引入了
spring-boot-starter-web,Spring Boot 會(huì)自動(dòng)配置 Spring MVC 和嵌入式 Tomcat。 - 自動(dòng)配置通過
@EnableAutoConfiguration注解實(shí)現(xiàn)。
起步依賴(Starter Dependencies)
- Spring Boot 提供了一系列
starter依賴,每個(gè)starter都包含了一組相關(guān)的依賴庫。例如,spring-boot-starter-web包含了 Spring MVC、Tomcat、Jackson 等依賴。 - 通過起步依賴,開發(fā)者無需手動(dòng)管理依賴版本,避免了依賴沖突。
嵌入式服務(wù)器
- Spring Boot 默認(rèn)集成了嵌入式服務(wù)器(如 Tomcat、Jetty、Undertow),開發(fā)者無需單獨(dú)部署應(yīng)用,直接運(yùn)行 JAR 包即可啟動(dòng)應(yīng)用。
二、Spring Boot 的啟動(dòng)流程
Spring Boot 的啟動(dòng)流程主要分為以下幾個(gè)步驟:
加載 SpringApplication
- 通過
SpringApplication.run()方法啟動(dòng)應(yīng)用。 SpringApplication類負(fù)責(zé)初始化應(yīng)用上下文、加載配置、啟動(dòng)嵌入式服務(wù)器等。
加載配置文件
- Spring Boot 會(huì)加載
application.properties或application.yml配置文件,并將其解析為Environment對(duì)象。
創(chuàng)建應(yīng)用上下文
- Spring Boot 根據(jù)應(yīng)用類型(如 Servlet、Reactive)創(chuàng)建相應(yīng)的應(yīng)用上下文(如
AnnotationConfigServletWebServerApplicationContext)。
執(zhí)行自動(dòng)配置
- Spring Boot 通過
@EnableAutoConfiguration注解觸發(fā)自動(dòng)配置機(jī)制,掃描META-INF/spring.factories文件中的配置類,并根據(jù)條件決定是否加載。
啟動(dòng)嵌入式服務(wù)器
- Spring Boot 根據(jù)配置啟動(dòng)嵌入式服務(wù)器(如 Tomcat),并將應(yīng)用部署到服務(wù)器中。
發(fā)布應(yīng)用啟動(dòng)事件
- 應(yīng)用啟動(dòng)完成后,Spring Boot 會(huì)發(fā)布
ApplicationStartedEvent事件,開發(fā)者可以通過監(jiān)聽該事件執(zhí)行自定義邏輯。
三、Spring Boot 的自動(dòng)配置機(jī)制
Spring Boot 的自動(dòng)配置是其核心特性之一,其原理如下:
@EnableAutoConfiguration 注解
@EnableAutoConfiguration注解會(huì)觸發(fā) Spring Boot 的自動(dòng)配置機(jī)制。- 該注解通過
@Import(AutoConfigurationImportSelector.class)導(dǎo)入自動(dòng)配置類。
spring.factories 文件
- Spring Boot 的自動(dòng)配置類定義在
META-INF/spring.factories文件中。 - 例如,
spring-boot-autoconfigure模塊中的spring.factories文件定義了大量的自動(dòng)配置類。
條件注解
- Spring Boot 使用條件注解(如
@ConditionalOnClass、@ConditionalOnMissingBean)來控制自動(dòng)配置類的加載。 - 例如,
DataSourceAutoConfiguration類只有在DataSource.class存在于類路徑時(shí)才會(huì)加載。
自動(dòng)配置示例
- 例如,當(dāng)項(xiàng)目中引入了
spring-boot-starter-web依賴時(shí),Spring Boot 會(huì)自動(dòng)配置以下內(nèi)容:- 嵌入式 Tomcat 服務(wù)器
- Spring MVC 的默認(rèn)配置(如視圖解析器、消息轉(zhuǎn)換器)
- 靜態(tài)資源處理(如
classpath:/static目錄)
四、Spring Boot 的核心注解
@SpringBootApplication
- 該注解是 Spring Boot 應(yīng)用的入口注解,包含了以下三個(gè)注解的功能:
@Configuration:標(biāo)識(shí)該類為配置類。@ComponentScan:?jiǎn)⒂媒M件掃描,自動(dòng)注冊(cè) Bean。@EnableAutoConfiguration:?jiǎn)⒂米詣?dòng)配置。
@Configuration
- 標(biāo)識(shí)該類為配置類,可以定義 Bean。
@Bean
- 用于在配置類中定義 Bean 對(duì)象。
@ConditionalOnClass
- 當(dāng)指定的類存在于類路徑時(shí),才會(huì)加載該配置。
@ConditionalOnMissingBean
- 當(dāng)容器中不存在指定的 Bean 時(shí),才會(huì)加載該配置。
五、Spring Boot 的配置文件
配置文件格式
- Spring Boot 支持
properties和yml兩種配置文件格式。 - 例如:
server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/mydb
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb配置文件加載順序
Spring Boot 會(huì)按以下順序加載配置文件:
- 項(xiàng)目根目錄下的
/config目錄。 - 項(xiàng)目根目錄。
classpath:/config目錄。classpath:/目錄。
多環(huán)境配置
- 通過
application-{profile}.properties或application-{profile}.yml文件實(shí)現(xiàn)多環(huán)境配置。 - 例如:
# application-dev.properties server.port=8081
# application-prod.properties server.port=80
六、Spring Boot 的擴(kuò)展機(jī)制詳解
自定義 Starter
- 開發(fā)者可以創(chuàng)建自定義的
starter,定義自動(dòng)配置類和起步依賴。 - 自定義
starter需要提供spring.factories文件,并在其中定義自動(dòng)配置類。
自定義注解
- 開發(fā)者可以基于 Spring Boot 的條件注解創(chuàng)建自定義注解,實(shí)現(xiàn)更靈活的條件控制。
自定義 Banner
- 通過在
src/main/resources目錄下創(chuàng)建banner.txt文件,可以自定義 Spring Boot 啟動(dòng)時(shí)的 Banner。
七、Spring Boot 的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 快速構(gòu)建獨(dú)立運(yùn)行的 Spring 應(yīng)用。
- 提供默認(rèn)配置,減少開發(fā)工作量。
- 集成嵌入式服務(wù)器,簡(jiǎn)化部署流程。
- 提供豐富的起步依賴,簡(jiǎn)化依賴管理。
缺點(diǎn)
- 對(duì)于初學(xué)者來說,自動(dòng)配置的機(jī)制可能不夠透明。
- 在大型項(xiàng)目中,可能需要手動(dòng)調(diào)整默認(rèn)配置。
總結(jié)
Spring Boot 通過自動(dòng)配置、起步依賴和嵌入式服務(wù)器等特性,極大地簡(jiǎn)化了 Spring 應(yīng)用的開發(fā)和部署流程。其核心原理包括自動(dòng)配置機(jī)制、條件注解和配置文件加載順序等。通過深入理解 Spring Boot 的工作原理,開發(fā)者可以更好地利用其特性,構(gòu)建高效、可維護(hù)的應(yīng)用程序。
到此這篇關(guān)于三分鐘帶你搞懂springboot原理的文章就介紹到這了,更多相關(guān)Spring Boot 原理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring常見錯(cuò)誤之Web嵌套對(duì)象校驗(yàn)失效解決辦法
這篇文章主要介紹了Spring常見錯(cuò)誤之Web嵌套對(duì)象校驗(yàn)失效解決的相關(guān)資料,通過在Phone對(duì)象上添加@Valid注解,問題得以解決,需要的朋友可以參考下2025-01-01
SpringBoot使用JdbcTemplate訪問操作數(shù)據(jù)庫基本用法
這篇文章主要介紹了SpringBoot使用JdbcTemplate訪問操作數(shù)據(jù)庫基本用法,Spring對(duì)數(shù)據(jù)庫的操作在jdbc上s面做了深層次的封裝,使用spring的注入功能,可以把DataSource注冊(cè)到JdbcTemplate之中。下文詳細(xì)內(nèi)容需要的小伙伴可以參考一下2022-02-02
使用Java高效讀取Word文檔的實(shí)戰(zhàn)指南
在當(dāng)今的企業(yè)級(jí)應(yīng)用中,Word文檔作為信息承載和交流的重要載體,其自動(dòng)化處理需求日益增長(zhǎng),無論是批量數(shù)據(jù)提取、內(nèi)容審計(jì),還是文檔智能分析,都離不開對(duì)Word文檔內(nèi)容的有效讀取,本文將深入探討如何使用Java高效、準(zhǔn)確地 讀取Word文件,需要的朋友可以參考下2025-09-09
Java中stream處理中map與flatMap的比較和使用案例
這篇文章主要介紹了Java中stream處理中map與flatMap的比較和使用案例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
springboot單文件下載和多文件壓縮zip下載的實(shí)現(xiàn)
這篇文章主要介紹了springboot單文件下載和多文件壓縮zip下載的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
JavaFX 監(jiān)聽窗口關(guān)閉事件實(shí)例詳解
這篇文章主要介紹了JavaFX 監(jiān)聽窗口關(guān)閉事件實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05

