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

淺談SpringBoot內嵌Tomcat的實現原理解析

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

一、序言

使用SpringBoot經常會使用內嵌的tomcat做為項目的啟動容器,本文將從源碼的角度出發(fā),剖析SpringBoot內嵌Tomcat的實現原理,討論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主要實現Spring組件掃描和自動配置。該注解是復合注解,其中@EnableAutoConfiguration本身也是一個復合注解,包含以下內容:

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

這兩個注解比較關鍵。@AutoConfigurationPackage主要實現自動配置包,會掃描@SpringbootApplication標注的類所在包名及其子包,將創(chuàng)建的組件添加到容器中;而@Import則是導入了AutoConfigurationImportSelector.class,實現查找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()是在項目啟動的過程中調用的。跟蹤SpringApplication的run(),其中存在refreshContext(context),此時主要完成容器的刷新。

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

在這里插入圖片描述

四、總結

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

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

相關文章

  • 自己手寫Mybatis通用batchInsert問題

    自己手寫Mybatis通用batchInsert問題

    這篇文章主要介紹了自己手寫Mybatis通用batchInsert問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • SpringBoot集成MinIO的示例代碼

    SpringBoot集成MinIO的示例代碼

    對象存儲服務OSS是一種海量、安全、低成本、高可靠的云存儲服務,適合存放任意類型的文件,這篇文章主要介紹了SpringBoot集成MinIO的示例代碼,需要的朋友可以參考下
    2023-06-06
  • httpclient evict操作源碼解讀

    httpclient evict操作源碼解讀

    這篇文章主要為大家介紹了httpclient evict操作源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Java調用明華RF讀寫器DLL文件過程解析

    Java調用明華RF讀寫器DLL文件過程解析

    這篇文章主要介紹了Java調用明華RF讀寫器DLL文件過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 詳解Java序列化如何破壞單例模式

    詳解Java序列化如何破壞單例模式

    這篇文章主要為大家詳細介紹了Java序列化是如何破壞單例模式的,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以學習一下
    2023-12-12
  • springboot2.2 集成 activity6實現請假流程(示例詳解)

    springboot2.2 集成 activity6實現請假流程(示例詳解)

    這篇文章主要介紹了springboot2.2 集成 activity6實現請假完整流程示例詳解,本文通過示例代碼圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 實例講解Java 自旋鎖

    實例講解Java 自旋鎖

    這篇文章主要介紹了Java 自旋鎖的相關資料,幫助大家更好的理解和學習Java并發(fā),感興趣的朋友可以了解下
    2020-09-09
  • 使用Java8?Stream流的skip?+?limit實現批處理的方法

    使用Java8?Stream流的skip?+?limit實現批處理的方法

    Stream 作為 Java 8 的一大亮點,它與 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念這篇文章主要介紹了使用Java8?Stream流的skip?+?limit實現批處理,需要的朋友可以參考下
    2022-07-07
  • 手寫redis@Cacheable注解?支持過期時間設置方式

    手寫redis@Cacheable注解?支持過期時間設置方式

    這篇文章主要介紹了手寫redis@Cacheable注解?支持過期時間設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 通過字節(jié)碼看java中this的隱式傳參詳解

    通過字節(jié)碼看java中this的隱式傳參詳解

    這篇文章主要給大家介紹了關于如何通過字節(jié)碼看java中this的隱式傳參的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11

最新評論

荣昌县| 会理县| 达州市| 呼玛县| 成都市| 华池县| 扬州市| 肇庆市| 高陵县| 常熟市| 大安市| 广昌县| 屏山县| 眉山市| 汝南县| 玛纳斯县| 三亚市| 堆龙德庆县| 潮州市| 元江| 谢通门县| 巴马| 马山县| 达州市| 泗阳县| 内丘县| 金沙县| 扬州市| 横山县| 洛阳市| 舞钢市| 米泉市| 南丹县| 永平县| 南通市| 沙湾县| 普安县| 平顺县| 陆川县| 固始县| 南京市|