1. 程式人生 > 其它 >Springboot啟動原理分析

Springboot啟動原理分析

1.Springboot啟動原理分析

1.1 繼承spring-boot-starter-parent,就相應的繼承了一些版本控制的東西

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

點選spring-boot-starter-parent,發現它又繼承spring-boot-dependencies

 <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.5.0</version>
  </parent>

點選spring-boot-dependencies,裡面有maven 依賴的相應版本依賴引入

1.2 看一下spring-boot-starter-web幫我們做了什麼事

裡面引入了springmvc,tomcat等等東西

點一下spring-boot-starter-json看一下

點一下看看spring-boot-starter-tomcat看一下,裡面嵌套了tomcat的相關東西

2.Springboot的自動配置

1.點選註解@SpringBootApplication

2.再點選註解@SpringBootConfiguration,結果發現其實就是一個配置類,也就是說SpringBootApplication本身就具備一個配置類configuration的功能

3.點選1出來的截圖上的註解@EnableAutoConfiguration,這是springboot自動配置的核心註解

4.componetScan元件掃描,約定了這個啟動類所在的包,及其所有子包都進行掃描

其實@SpringBootApplication註解是可以代替3個註解的作用
Configuration,ComponetScan,EnableAutoConfiguration的作用

3.Springboot的核心註解EnableAutoConfiguration

是否可以自動配置

點選AutoConfigurationImportSelector

點選進去,找到最核心的getCandidateConfigurations

當前的類所在的jar包的META-INF/spring.fact
org.springframework.boot.autoconfigure

找到spring.factories

舉個例子找servlet關鍵字裡的ServletWebServerFactoryAutoConfiguration,發現裡面有一個EnableConfigurationProperties(ServerProperties.class)

發現裡面都是配置
具體預設的值在哪呢
是在和META-INF/spring-configuration-metadata.json裡

{
      "name": "server.port",
      "type": "java.lang.Integer",
      "description": "Server HTTP port.",
      "sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties",
      "defaultValue": 8080
    }

4.autoconfigure

覆蓋預設配置
application.properties
server.port=8081

原創:做時間的朋友