spring boot2.0一看就會的超詳細快速入門(四)-自動配置原理


 

 

 

在springboot主程序類中,有一個非常重要的注釋@SpringBootApplication,Springboot運行這個類下的main方法啟動springboot應用,如下:

按住鍵盤上Ctrl鍵,用鼠標點擊這個注釋,可以看到這個注釋啟用了三個注釋功能:

1.@SpringBootConfiguration:允許在上下文中注冊額外的bean或導入其他配置類

2.@EnableAutoConfiguration:啟用Spring Boot的自動配置機制

3.@ComponentScan:啟用組件掃描功能

簡單來說,就是@SpringBootApplication是一個組合注解,相當於使用@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三個注釋與它們的默認屬性,如下圖:

 @SpringBootConfiguration :SpringBoot配置類,與@Configuration注解作用一樣,將當前類內聲明的一個或多個以@Bean注解標記的方法的實例放入到spring容器中,實例名就是方法名,相當於Spring中的配置文件

 
        

說明: @*Configuration表示xx配置類,點擊@SpringBootConfiguration代碼分析,如下圖:

同時需要說明一下,配置類也是Spring容器中的一個組件,我們可以按住鍵盤上的Ctrl鍵,用鼠標點@Configuration打開代表跟蹤如下圖:

@EnableAutoConfiguration也是一個組注解,我們按上述同樣的方法打開代碼跟蹤。如下圖所示:

 

 @AutoConfigurationPackage:包自動配置,跟蹤代碼發現就是由一個@import注釋,如下圖:

通過跟蹤發現, @AutoConfigurationPackage注解使用的Spring底層注解@Import,給容器導入一個組件,導入的組件由AutoConfigurationPackages.Registrar類處理導入,按住鍵盤Ctrl鍵,用鼠標點擊Registrar類名,可以看到如下圖所示代碼結構:

我們在Registrar方法中的第129行處打下斷點,對register方法進行跟蹤調試,運行項目調試程序,如下圖所示:

依次點擊introspectedClass我們可以看到@SpringBootApplication標注所在類為SpringApplicationStart,如下圖所示:

為了測試得到導入的包名,我們把new PackageImport(metadata).getPackageName()),復制到調試窗口中的Expressions標簽頁,點擊Add new expression,在name中粘貼new PackageImport(metadata).getPackageName()),回車即可在Value中看到導入的包名com.goldCup.boot.main,如下圖:

 

通過調試我們可以知道:@AutoConfigurationPackage注釋的作用就是將主配置類所在的包下面所有的組件都掃描到Spring容器中。

@EnableAutoConfiguration還有另一個@Import注釋,跟據字義,我們可以理解為導入組件選擇器自動配置,作用是將需要導入的組件以全類名的方式返回,這些組件將被添加到Spring容器中,如圖:

自動配置類的作用,配置注入功能組件自動完成。

SpringBoot在啟動的時候從自動配置類路徑下的META-INF/spring.factorles中獲取EnableAutoConfiguration指定的值,並將這些值作為自動配置類導入到容器中,自動配置類就生效,如下圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM