亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺談SpringBoot內(nèi)嵌Tomcat的實現(xiàn)原理解析

 更新時間:2020年12月20日 16:57:59   作者:無聊的洪某人  
這篇文章主要介紹了淺談SpringBoot內(nèi)嵌Tomcat的實現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、序言

使用SpringBoot經(jīng)常會使用內(nèi)嵌的tomcat做為項目的啟動容器,本文將從源碼的角度出發(fā),剖析SpringBoot內(nèi)嵌Tomcat的實現(xiàn)原理,討論Tomcat何時創(chuàng)建、何時啟動以及怎么啟動。

二、引入Tomcat組件

導入依賴:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

項目啟動:

@SpringBootApplication
public class Application {
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

以上是一段常見的SpringBoot項目依賴和啟動的代碼。引入spring-boot-starter-web同時會默認引入spring-boot-starter-tomcat,即Tomcat啟動的相關環(huán)境。而對于項目啟動代碼,@SpringBootApplication主要實現(xiàn)Spring組件掃描和自動配置。該注解是復合注解,其中@EnableAutoConfiguration本身也是一個復合注解,包含以下內(nèi)容:

@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
}

這兩個注解比較關鍵。@AutoConfigurationPackage主要實現(xiàn)自動配置包,會掃描@SpringbootApplication標注的類所在包名及其子包,將創(chuàng)建的組件添加到容器中;而@Import則是導入了AutoConfigurationImportSelector.class,實現(xiàn)查找classpath上所有jar包中的META-INF/spring.factories,找出其中的自動配置類并導入到容器中,其中Web容器所對應的自動配置類為ServletWebServerFactoryAutoConfiguration。

在這里插入圖片描述

ServletWebServerFactoryAutoConfiguration中支持好幾種web容器,比如Tomcat、Jetty和Undertow。

在這里插入圖片描述

而EmbeddedTomcat則是Tomcat組件相關的類,本身是一個FactoryBean,用來實例化TomcatServletWebServerFactory。此時TomcatServletWebServerFactory中就包含了創(chuàng)建和啟動Tomcat的方法getWebServer()。

在這里插入圖片描述

三、Tomcat組件啟動

SpringBoot是在項目啟動的時候才同時啟動Tomcat的,很顯然getWebServer()是在項目啟動的過程中調(diào)用的。跟蹤SpringApplication的run(),其中存在refreshContext(context),此時主要完成容器的刷新。

在這里插入圖片描述

容器刷新跟蹤到最后是AbstractApplicationContext中的onRefresh(),顯然這是一個鉤子函數(shù),應用了模板方法,查看所有的實現(xiàn)方法,其中有一個ServletWebServerApplicationContext,則是當前Web容器的實現(xiàn)。

在這里插入圖片描述

而ServletWebServerApplicationContext中主要是去獲得ServletWebServerFactory對象,同時調(diào)用getWebServer創(chuàng)建WebServer對象。

在這里插入圖片描述

此時,主要處理的是Tomcat容器對象的創(chuàng)建、環(huán)境配置和啟動。

在這里插入圖片描述

在這里插入圖片描述

四、總結

到這里,基本就走完了內(nèi)嵌Tomcat創(chuàng)建啟動的整個流程。其實核心主要還是依賴于SpringBoot的自動配置。項目啟動的過程中,掃描classpath下的META-INF/spring.factories,實例化工廠對象TomcatServletWebServerFactory,在調(diào)用run()方法的時候完成Tomcat對象的創(chuàng)建,環(huán)境設置和啟動,從而實現(xiàn)Tomcat容器的自動化處理。

到此這篇關于淺談SpringBoot內(nèi)嵌Tomcat的實現(xiàn)原理解析的文章就介紹到這了,更多相關SpringBoot內(nèi)嵌Tomcat內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 實例分析java對象的序列化和反序列化

    實例分析java對象的序列化和反序列化

    序列化 (Serialization)是將對象的狀態(tài)信息轉(zhuǎn)換為可以存儲或傳輸?shù)男问降倪^程。一般將一個對象存儲至一個儲存媒介,例如檔案或是記億體緩沖等。在網(wǎng)絡傳輸過程中,可以是字節(jié)或是XML等格式。而字節(jié)的或XML編碼格式可以還原完全相等的對象。這個相反的過程又稱為反序列化
    2018-09-09
  • Mybatis如何一次性插入多條數(shù)據(jù)

    Mybatis如何一次性插入多條數(shù)據(jù)

    這篇文章主要介紹了Mybatis如何一次性插入多條數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Spring整合Mybatis具體代碼實現(xiàn)流程

    Spring整合Mybatis具體代碼實現(xiàn)流程

    這篇文章主要介紹了Spring整合Mybatis實操分享,文章首先通過介紹Mybatis的工作原理展開Spring整合Mybatis的詳細內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • 教你一步到位部署運行MyBatis3源碼(保姆級)

    教你一步到位部署運行MyBatis3源碼(保姆級)

    一個框架的運行流程從最簡單的一個helloworld來看其源碼就能了解到框架的原理是什么,這篇文章主要給大家介紹了關于如何一步到位部署運行MyBatis3源碼的相關資料,需要的朋友可以參考下
    2022-06-06
  • Springboot 讀取 yml 配置文件里的參數(shù)值

    Springboot 讀取 yml 配置文件里的參數(shù)值

    本文主要介紹了Springboot 讀取 yml 配置文件里的參數(shù)值,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • JAVA線程sleep()和wait()詳解及實例

    JAVA線程sleep()和wait()詳解及實例

    這篇文章主要介紹了JAVA線程sleep()和wait()詳解及實例的相關資料,探討一下sleep()和wait()方法的區(qū)別和實現(xiàn)機制,需要的朋友可以參考下
    2017-05-05
  • Mybatis的mapper標簽 namespace屬性用法說明

    Mybatis的mapper標簽 namespace屬性用法說明

    這篇文章主要介紹了Mybatis的mapper標簽 namespace屬性用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Spring Boot整合swagger使用教程詳解

    Spring Boot整合swagger使用教程詳解

    這篇文章主要介紹了Spring Boot整合swagger使用教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • PowerShell用戶認證Function實例代碼

    PowerShell用戶認證Function實例代碼

    這篇文章主要介紹了PowerShell用戶認證Function的資料,并附實例代碼,幫助大家學習理解,有需要的小伙伴可以參考下
    2016-09-09
  • ssm 使用token校驗登錄的實現(xiàn)

    ssm 使用token校驗登錄的實現(xiàn)

    這篇文章主要介紹了ssm 使用token校驗登錄的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04

最新評論