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
代補充....