從零開始的Spring Boot學習【三】【自動裝配(二)】

講它的實現原理的話,那我們從Spring Boot的註解開始講起,在這之前我們要先了解它是以什麼方式運作的。

Spring Boot將各個應用/第三方框架設置成了一個個場景“starter”,以後要用到哪一個,只需要引用那個場景就可以了。

https://docs.spring.io/spring-boot/docs/2.2.4.RELEASE/reference/html/using-spring-boot.html#using-boot-starter

在上述的鏈接,可以查看有關於Spring Boot的各種場景,裏面有簡介和相關的pom文件,pom文件時存放在了github中,像我們在一開始構建項目的時候,就是選擇的web場景,如果忘記的小朋友可以返回去看我們的:Spring Boot學習【一】

我們所選擇的web場景,簡介上說是構建web的開始,所以這個場景對於我們來說,就是最基本的一個starter了。選完之後,Spring Boot就會將我們所需要的所有依賴自動注入。像web場景,spring boot就會將web相關的依賴(tomcat  json等) 全部引入本項目。

在我們的demo程序中,有一行這樣的註解,@SpringBootApplication。

這個註解是SpringBoot框架最基本的一個註解(主配置類),需要用到它來標識這是一個Spring Boot程序,我們按住Ctrl點進去看看,看看這個類裏面寫了什麼,在這個主配置類中,也是寫了許多的註解,大家不用驚慌,看似很複雜,但是在我們尋其根源後,其實並不複雜。在衆多註解中,我們主要介紹的是這兩個:

@SpringBootConfiguration: 我們按住Ctrl,點進去看看,會發現它還包含了一個註解叫做@Configuration,表示“配置類”。

加了它的類就是一個配置類,加了@Configuration註解的類,會自動納入Spring 容器中

例如:

@Configuration
public class A//表示A是一個 用於配置的類
{
}

 

@EnableAutoConfiguration:這個是自動配置的註解,你注意到了嗎,像什麼spring.xml,mybatisConfig.xml,springmvc.xml等等,我們都沒有去配置過,那這個程序是怎麼跑起來的?就依賴於這個註解,這個註解的功能是自動配置,即約定優於配置,如果我們事先已經約定好了一個方案,那麼我們就不需要配置它。

按住Ctrl,我們點進去看一下。

在裏面有一個@AutoConfigurationPackage註解,大家記得我們以前配置Spring的時候,需要寫一個掃描器,要把Controller的包放入掃描器scan,我們之前就沒有寫,但是還是可以識別我們的Controller,在哪裏做了這種操作呢?是的,在@AutoConfigurationPackage中做了。

因爲@AutoConfigurationPackage是在@EnableAutoConfiguration註解中,我們把總的功能歸結爲@EnableAutoConfiguration的功能,它可以找到@SpringBootApplication所在類的包。作用:就會將該包及所有的子包全部納入spring容器中。

在@EnableAutoConfiguration中還有一個註解要講一下:

我們來區分一下。

@AutoConfigurationPackage//是引入自己寫的包,即各種Controller

@Import(AutoConfigurationImportSelector.class)//則是引入的第三方jar包

那麼它是怎麼引入第三方jar包的呢?我們按住Ctrl點進去,我們按住ctrl+F,去尋找一個叫做selectImports的方法。

在這個方法裏有一個獲取自動配置的入口,我們按住Ctrl進去看看。

在這個方法裏,還嵌套了一個方法獲取候選的配置,即準備要配置的信息,我們按住Ctrl,繼續往深處探尋。

在這個方法裏,我們看到一個加載factory名字的方法,勝利就在不遠處!我們繼續按住Ctrl看看它最深層到底寫了什麼。

在這個方法裏,我們終於看到了,獲取資源的路徑,這個是一個靜態的不可變的常量,我們按住Ctrl進去。

原來是寫了這麼一句話,獲取這個配置文件裏面的信息,去裝配第三方jar包。那麼裏面到底寫了啥呢,我們下節再講。關注博主,更多精彩哦!

 

上一章:從零開始的Spring Boot學習【二】【自動裝配(一)】

下一章:從零開始的Spring Boot學習【四】【自動裝配(三)】

發佈了34 篇原創文章 · 獲贊 36 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章