版本:Spring Boot:已經吃了很多關于版本的虧!看之前先看版本資訊。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
SpringBoot在進行SpringApplication對象執行個體化時會加載META-INF/spring.factories檔案,将該配置檔案中的配置載入到Spring容器。該檔案的位置如圖:
源碼分析:
一、從入口開始跟進
二、跟進run()方法
三、隻執行了一個run()方法,繼續跟進
四、可以看到隻建立了一個對象,我們跟進構造函數
五、看到他調用的是this方法,其實就是下邊的構造方法2
六、在構造中有一個方法三
七、跟進getSpringFactoriesInstances()
八、歡呼雀躍吧,loadFactoryNames()就是加載檔案的方法
loadFactoryNames方法的作用是把/spring.factories檔案中的配置類轉化為對象,我們可以看到SpringApplication對象執行個體化時就是在這裡加載META-INF/spring.factories檔案
九、如果我們想排除一個自動引入的jar可以
十、檢視Spring Boot自帶的自動配置的包: spring-boot-autoconfigure-1.5.6.RELEASE.jar,打開其中的META-INF/spring.factories檔案會找到自動配置的映射。
再來看看資料源自動配置的實作注解
怎麼找到源碼檔案?按着command+單擊username或password,進去九一切了然