springboot源碼分析——自動配置流程


 

一:ConfigurationClassPostProcessor類的埋點

  自動配置解析的核心功能都在這個類里面,這是一個BeanDefinitionRegistryPostProcessor的實現類,首先需要注冊BeanDefinition,

然后實例化對象,最后調用,我們來循序漸進的跟進一下

1:注冊ConfigurationClassPostProcessor的BeanDefinition對象

 

 

 

實例化這個類對調用到類的無參數構造方法:

 

 

 

 

 

 無參數構造方法:

 

 

 

 

 

 

 

 

 

2:注冊啟動類的配置文件 ,TestSpringbootApplication

 

 

 

 

 

 

 

 

 

 

 

 

 創建並注冊BeanDefinition對象:

 

 

3:實例化ConfigurationClassPostProcessor對象並且調用

因為是BeanDefinitionRegistryPostProcessor接口的實現類,所以會在這個 方法實例化並調用哦

 

 

 

 

 

 

 

 

 

 

 調用到類ConfigurationClassPostProcessor類中

 

二:自動配置整體流程分析

1:如果沒有任何配置

 

 

 

 

2:加上@Configuration注解

 

 會發現所有的解析動作都會空跑一遍

 

3:加上ComponentScan注解

 

 

 

進入解析:parse  

 

 

 

 

 

 

 

這種解析的方法doProcessConfigurationClass:

 

 

解析ComponentScan組件:

 

 

這樣@ComponentScan組件就解析完成了

 

4:加上@Import注解

 

 

 

 

 

 

 

 注冊Import,registerImport,注冊后處理processConfigurationClass,遞歸處理Configuration注解的類

 

 

 

 

 

 

 

 

 到這里Import類的解析完畢,包括遞歸解析

 

 

 

 我們來簡單的看一下自動配置如何解析

從這里開始:

 

獲取Import注解:

 

 搜集Import:

 

 

注冊registrar對象:

 

 

 注冊deferImportSelector對象:

 

 

 

 

 

 

 注冊並且搜集Import信息邏輯:

 

 

 

 

 

 

 

 

 

 這里又回到了最開始埋點時候的加載流程,會把所有的EnableAutoConfiguration 的key對應的values值返回

返回之后開始處理Configuration的邏輯

 

進入解析configuration注解的遞歸方法:

 

 

 到這里在spring.factories中配置項都解析完成,而且會解析每一個EnableAutoConfiguration的values項,實現注冊beanDefinition。

以JmxAutoConfiguration為例,分析一下注冊流程

解析到configuration類中有@Bean注解,需要搜集@Bean方法信息,緩存到configClass中

 

 

 

 解析配置類:

 

 

當spring容器啟動的時候,會解析deferImportSelector,加載所有的spring.factories文件中的配置,過濾

遞歸解析configuration配置

 總結:

  自動配置的實現就是spring啟動的時候,加載spring.factories的配置,解析每一個Configuration類,根據condition加載自動配置類,

根據condition條件實例化bean對象,然后維護到spring容器中。

 


免責聲明!

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



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