1. 程式人生 > 實用技巧 >Springboot執行原理探究

Springboot執行原理探究

我們之前寫的HelloSpringBoot是怎麼執行的,Manven專案我們從pom.xml檔案探究

1.Pom.xml

1.父依賴

springboot主要依賴一個父專案,主要是管理專案的資源過濾及外掛

1 <parent>
2      <groupId>org.springframework.boot</groupId>
3      <artifactId>spring-boot-starter-parent</artifactId>
4      <version>2.3.3.RELEASE</version>
5
<relativePath/> <!-- lookup parent from repository --> 6 </parent>

點選去發現還有一個父依賴

1   <parent>
2     <groupId>org.springframework.boot</groupId>
3     <artifactId>spring-boot-dependencies</artifactId>
4     <version>2.3.3.RELEASE</version>
5
</parent>

這才是真正管理springboot應用裡面所有依賴版本的地方,springboot的版本控制中心

以後我們匯入依賴預設是不需要寫版本的,但是如果匯入的包沒有在依賴中管理,需要手動配置版本。

2.啟動器spring-boot-starter

1 <dependency>
2      <groupId>org.springframework.boot</groupId>
3      <artifactId>spring-boot-starter-web</artifactId>
4 </dependency>

springboot-boot-starter-xxx:就是spring-boot的場景啟動器

springboot-starter-web:幫我們匯入了web模組正常執行所依賴的元件

springboot將所有的功能長江都抽出來,做成一個個的starter(啟動器),只需要在專案中引入這些starter即可,所有相關的

依賴都會匯入進來,我們要什麼功能就匯入什麼樣的場景啟動器即可,我們未來也可以自己自定義starter

2.主啟動類

1.預設啟動類

1 @SpringBootApplication    //@springBootApplication來標註一個主程式類,說明這是一個springboot應用
2 public class Springbootstudy01Application {
3 
4     public static void main(String[] args) {
5         SpringApplication.run(Springbootstudy01Application.class, args);  //以為是啟動一個方法,沒想到啟動一個服務
6     }
7 
8 }

一個簡單的啟動類並不簡單,我們來分析一下這些註解都是幹什麼的

2.@SpringBootApplication

作用:標註在某個類上說明這個類是SpringBoot的主配置類,SpringBoot就應該執行這個類的main方法,來啟動SpringBoot應用

進入這個註解可以看到其他的許多註解

 1 @Target({ElementType.TYPE})
 2 @Retention(RetentionPolicy.RUNTIME)
 3 @Documented
 4 @Inherited
 5 @SpringBootConfiguration
 6 @EnableAutoConfiguration
 7 @ComponentScan(
 8     excludeFilters = {@Filter(
 9     type = FilterType.CUSTOM,
10     classes = {TypeExcludeFilter.class}
11 ), @Filter(
12     type = FilterType.CUSTOM,
13     classes = {AutoConfigurationExcludeFilter.class}
14 )}
15 )
16 public @interface SpringBootApplication {
17     @AliasFor(
18         annotation = EnableAutoConfiguration.class
19     .......
20     )

3.@ComponentScan

這個註解在Spring很重要,它對應XML配置中的元素

作用:自動掃描並載入符合條件的元件和bean,將這個bean定義載入到IOC容器中

4.@SpringBootConfiguration

作用:SpringBoot的配置類,標註在某個類上,表示這是一個SpringBoot的配置類

進入這個註解

 1 @Target({ElementType.TYPE})
 2 @Retention(RetentionPolicy.RUNTIME)
 3 @Documented
 4 @Configuration
 5 public @interface SpringBootConfiguration {
 6     @AliasFor(
 7         annotation = Configuration.class
 8     )
 9     boolean proxyBeanMethods() default true;
10 }

@configuration說明這個是一個配置類,配置類對應Spring的xml配置檔案

@Component說明啟動類本身也是Spring中的一個元件而已,負責啟動應用

回到SpringBootApplication註解中繼續看

5.@EnableAutoConfiguration

代補充....