最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot的運行機制詳細解讀

 更新時間:2025年12月19日 14:42:49   作者:杰西筆記  
SpringBoot是Spring框架的封裝與增強,通過自動配置和內(nèi)嵌服務(wù)器簡化了JavaWeb開發(fā),從宏觀架構(gòu)、啟動流程、核心原理三個層面深入解析,強調(diào)了控制反轉(zhuǎn)、自動配置和Starter機制,通過若依項目實例展示了如何在實際應(yīng)用中使用SpringBoot,感興趣的朋友跟隨小編一起看看吧

理解 Spring Boot 的運行機制,是掌握現(xiàn)代 Java Web 開發(fā)的關(guān)鍵。我們可以從 宏觀架構(gòu) + 啟動流程 + 核心原理 三個層面來系統(tǒng)性地拆解。

?? 一句話總結(jié)

Spring Boot = Spring 框架 + 自動配置(AutoConfiguration)+ 內(nèi)嵌服務(wù)器(如 Tomcat) + 約定優(yōu)于配置(Convention over Configuration)

它讓你 不用寫 XML、不用配 web.xml、不用手動部署 WAR 包,直接 main() 方法啟動一個完整的 Web 應(yīng)用。

一、宏觀視角:Spring Boot 是如何工作的?

?? 整體架構(gòu)圖(簡化版)

graph LR
    A[你的代碼] --> B(Spring Boot Starter)
    B --> C[Spring Framework]
    C --> D[內(nèi)嵌 Tomcat/Jetty]
    D --> E[HTTP 請求/響應(yīng)]
    F[application.yml] --> C
    G[@SpringBootApplication] --> C
  • 你的代碼:Controller、Service、Mapper 等
  • Starterspring-boot-starter-web、mybatis-spring-boot-starter 等,自動引入依賴和配置
  • Spring Framework:核心容器(IoC、AOP)、事務(wù)、Web MVC 等
  • 內(nèi)嵌服務(wù)器:無需外部 Tomcat,直接運行 JAR 包
  • 配置文件application.yml 控制行為

二、啟動流程詳解(從 main() 到接收請求)

?? 步驟 1:執(zhí)行main()方法

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args); // ← 關(guān)鍵入口
    }
}

這不是普通程序入口,而是 啟動 Spring 容器的命令。

?? 步驟 2:創(chuàng)建SpringApplication實例

SpringApplication.run() 內(nèi)部會:

  • 推斷應(yīng)用類型(SERVLET / REACTIVE)
  • 設(shè)置初始化器(Initializers)
  • 設(shè)置監(jiān)聽器(Listeners)
  • 推斷主配置類(即帶 @SpringBootApplication 的類)

?? 步驟 3:刷新 Spring 應(yīng)用上下文(refresh context)

這是最核心的一步,包含以下子過程:

? 3.1 掃描組件(Component Scan)

  • @SpringBootApplication 所在包開始遞歸掃描
  • 發(fā)現(xiàn) @Component, @Service, @Controller, @Repository 等注解的類
  • 將它們注冊為 BeanDefinition(Bean 的“藍圖”)

? 3.2 加載自動配置(AutoConfiguration)

  • 讀取 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  • 根據(jù) classpath 中的依賴(如存在 tomcat-embed-core.jar),自動啟用 TomcatServletWebServerFactory
  • 條件裝配:只有滿足條件才生效(如 @ConditionalOnClass(DataSource.class)

?? 這就是為什么你只加 mybatis-spring-boot-starter,MyBatis 就能自動工作!

? 3.3 創(chuàng)建 Bean 實例(IoC 容器初始化)

  • 遍歷所有 BeanDefinition
  • 通過反射調(diào)用構(gòu)造函數(shù) → new XxxService()
  • 執(zhí)行依賴注入(@Autowired
  • 調(diào)用初始化方法(@PostConstruct

? 3.4 啟動內(nèi)嵌 Web 服務(wù)器

  • 如果是 Web 應(yīng)用,會創(chuàng)建 Tomcat 實例
  • 注冊 DispatcherServlet(Spring MVC 的核心)
  • 綁定端口(默認 8080)

? 3.5 觸發(fā)啟動完成事件

  • 調(diào)用 CommandLineRunner / ApplicationRunner
  • 日志輸出:Started Application in X.XXX seconds

?? 步驟 4:等待并處理 HTTP 請求

當用戶訪問 http://localhost:8080/api/user

瀏覽器 → 
  ↓
內(nèi)嵌 Tomcat 接收請求 → 
  ↓
DispatcherServlet(前端控制器) → 
  ↓
HandlerMapping 找到匹配的 @Controller → 
  ↓
調(diào)用對應(yīng)方法(如 getUser()) → 
  ↓
返回結(jié)果(JSON / 頁面) → 
  ↓
Tomcat 返回響應(yīng)給瀏覽器

? 整個過程由 Spring MVC 驅(qū)動,而 Spring MVC 是 Spring Framework 的一部分。

三、核心機制解析

1??控制反轉(zhuǎn)(IoC)與依賴注入(DI)

  • IoC:對象的創(chuàng)建權(quán)交給 Spring 容器(不再是 new
  • DI:容器自動把依賴的對象“注入”進來(@Autowired

?? 結(jié)果:代碼解耦,易于測試和維護。

2??自動配置(AutoConfiguration)

Spring Boot 通過 @EnableAutoConfiguration 實現(xiàn)“智能配置”。

例如:

  • 發(fā)現(xiàn) classpath 有 HikariCP → 自動配置數(shù)據(jù)源
  • 發(fā)現(xiàn)有 spring-webmvc → 自動配置 DispatcherServlet
  • 發(fā)現(xiàn)有 mybatis-spring → 自動配置 SqlSessionFactory

? 你只需在 application.yml 中寫:

spring:
  datasource:
    url: jdbc:mysql://...

3??Starter 機制

Starter 是“一站式依賴包”,比如:

Starter功能
spring-boot-starter-webWeb 開發(fā)(含 Tomcat + Spring MVC)
mybatis-spring-boot-starterMyBatis 集成
spring-boot-starter-data-redisRedis 支持

?? 引入 starter 后,Spring Boot 自動完成配置,你幾乎不用寫代碼。

4??內(nèi)嵌服務(wù)器

  • 默認使用 Tomcat(可切換為 Jetty 或 Undertow)
  • 打包成 JAR(不是 WAR),直接 java -jar app.jar 運行
  • 無需安裝外部 Web 容器

四、若依(RuoYi)項目中的體現(xiàn)

你在若依項目中看到的:

@SpringBootApplication
@EnableAsync
@EnableTransactionManagement
public class RuoYiApplication {
    public static void main(String[] args) {
        SpringApplication.run(RuoYiApplication.class, args);
    }
}
  • @SpringBootApplication:啟動自動配置 + 組件掃描
  • @EnableAsync:開啟異步支持(@Async
  • @EnableTransactionManagement:開啟事務(wù)管理(@Transactional

當你訪問 /system/user/list

  1. 請求被 Tomcat 接收
  2. DispatcherServlet 路由到 SysUserController.list()
  3. 調(diào)用 SysUserService.selectUserList()
  4. SysUserMapper.selectUserList() 執(zhí)行 SQL
  5. 返回 JSON 數(shù)據(jù)

? 全程由 Spring Boot 自動串聯(lián),你只需關(guān)注業(yè)務(wù)邏輯。

五、可視化:Spring Boot 啟動流程圖

main() SpringApplication ApplicationContext Tomcat DispatcherServlet run() create & refresh() scan components load auto-configurations create beans (IoC) start embedded server register DispatcherServlet ready! Wait for HTTP requests... main() SpringApplication ApplicationContext Tomcat DispatcherServlet

六、常見誤區(qū)澄清

誤區(qū)正確理解
? “Spring Boot 是一個新框架”? 它是 Spring Framework 的封裝和增強
? “必須用注解,不能用 XML”? 仍可混合使用 XML 配置(但不推薦)
? “自動配置無法定制”? 可通過 application.yml 覆蓋,或 @EnableAutoConfiguration(exclude=...) 禁用
? “Bean 是多例的”? 默認是單例(Singleton),可通過 @Scope("prototype") 改變

七、總結(jié):Spring Boot 的設(shè)計哲學(xué)

原則說明
? 約定優(yōu)于配置默認行為合理,減少配置
? 開箱即用引入 starter 即可工作
? 生產(chǎn)就緒內(nèi)置監(jiān)控(Actuator)、健康檢查
? 快速開發(fā)熱部署、簡化部署(JAR 直接運行)

?? 學(xué)習(xí)建議

  1. 先會用:寫 Controller、Service、Mapper,跑通 CRUD
  2. 再理解:看啟動日志,了解自動配置過程
  3. 最后深入:閱讀 spring-boot-autoconfigure 源碼,理解條件裝配

到此這篇關(guān)于springboot的運行機制解析的文章就介紹到這了,更多相關(guān)springboot運行機制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot配置MyBatis-Plus實現(xiàn)增刪查改

    SpringBoot配置MyBatis-Plus實現(xiàn)增刪查改

    本文主要介紹了SpringBoot配置MyBatis-Plus實現(xiàn)增刪查改,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java陷阱之a(chǎn)ssert關(guān)鍵字詳解

    Java陷阱之a(chǎn)ssert關(guān)鍵字詳解

    這篇文章詳細介紹了Java陷阱之a(chǎn)ssert關(guān)鍵字,有需要的朋友可以參考一下
    2013-09-09
  • Java中重寫和重載的區(qū)別及說明

    Java中重寫和重載的區(qū)別及說明

    Java語言中的重載和重寫是實現(xiàn)多態(tài)的兩種方式,但他們的實現(xiàn)方式和規(guī)則有所不同,重載發(fā)生在一個類中,同名的方法如果有不同的參數(shù)列表,則視為重載,重寫則發(fā)生在子類和父類之間,要求子類重寫方法和父類被重寫方法有相同的返回類型
    2024-10-10
  • Spring Security如何基于Authentication獲取用戶信息

    Spring Security如何基于Authentication獲取用戶信息

    這篇文章主要介紹了Spring Security如何基于Authentication獲取用戶信息,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Java基礎(chǔ)之引用相關(guān)知識總結(jié)

    Java基礎(chǔ)之引用相關(guān)知識總結(jié)

    今天聊聊Java的引用,大多數(shù)時候我們說引用都是強引用,只有在對象不使用的情況下才會釋放內(nèi)存,其實Java 內(nèi)存有四種不同的引用.一起看看吧,,需要的朋友可以參考下
    2021-05-05
  • 解決SpringBoot整合RocketMQ遇到的坑

    解決SpringBoot整合RocketMQ遇到的坑

    這篇文章主要介紹了解決SpringBoot整合RocketMQ遇到的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java的Lambda表達式使用及說明

    Java的Lambda表達式使用及說明

    文章介紹了JavaSE8中的Lambda表達式,其基本語法、函數(shù)接口的概念以及在集合中的使用,同時,還討論了Lambda表達式的變量捕獲和一些優(yōu)點與缺點
    2026-02-02
  • SpringBoot?實現(xiàn)CAS?Server統(tǒng)一登錄認證的詳細步驟

    SpringBoot?實現(xiàn)CAS?Server統(tǒng)一登錄認證的詳細步驟

    ??CAS(Central?Authentication?Service)中心授權(quán)服務(wù),是一個開源項目,目的在于為Web應(yīng)用系統(tǒng)提供一種可靠的單點登錄,這篇文章主要介紹了SpringBoot?實現(xiàn)CAS?Server統(tǒng)一登錄認證,需要的朋友可以參考下
    2024-02-02
  • java線程池ThreadPoolExecutor類使用小結(jié)

    java線程池ThreadPoolExecutor類使用小結(jié)

    這篇文章主要介紹了java線程池ThreadPoolExecutor類使用,本文主要對ThreadPoolExecutor的使用方法進行一個詳細的概述,示例代碼介紹了ThreadPoolExecutor的構(gòu)造函數(shù)的相關(guān)知識,感興趣的朋友一起看看吧
    2022-03-03
  • springboot項目使用Disruptor做內(nèi)部消息隊列的實現(xiàn)

    springboot項目使用Disruptor做內(nèi)部消息隊列的實現(xiàn)

    本文主要介紹了springboot項目使用Disruptor做內(nèi)部消息隊列的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評論

梧州市| 贵州省| 奇台县| 大同市| 中西区| 巫山县| 凭祥市| 中卫市| 泾源县| 芒康县| 邢台市| 榆林市| 南木林县| 佳木斯市| 微山县| 鹤山市| 东平县| 大宁县| 元氏县| 鲁甸县| 铜川市| 万州区| 通榆县| 肃北| 邛崃市| 宣城市| 阳谷县| 绥芬河市| 新平| 资兴市| 河西区| 靖西县| 文化| 新源县| 鄄城县| 札达县| 浙江省| 得荣县| 沙河市| 崇义县| 中江县|