iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
Software Development

我在 Spring Boot 3 裡面挖呀挖呀挖系列 第 11

Day10 - 深入理解自動配置原理之@SpringApplcation

  • 分享至 

  • xImage
  •  

Day10 - 深入理解自動配置原理之@SpringApplcation

前言

昨天我們了解多數的場景啟動器都會包含spring-boot-starter這個dependency,它將各個式各樣功能的配置類放到classpath中,一旦ConditionOnXXX條件成立,那麼配置類就會生效,我們就可以使用該功能。還記得我們曾經說過的,Spring Boot預設的ComponentScan是在它自己的包下與其子包才會被掃描註冊到Container中,那麼到底Spring Boot是如何將autoconfigure下的配置類註冊到Container中的呢,今日我們就來討論這個議題。

專案建立

創建day10_autoconfigure_insight2專案

https://ithelp.ithome.com.tw/upload/images/20230926/201280840GmW03iRKF.pnghttps://ithelp.ithome.com.tw/upload/images/20230926/201280843yzkmbWx8C.png

配置文件

server.port = 9999

深入理解自動配置原理之@SpringApplcation

我們從@SpringApplcation開始來看吧

@SpringApplcation

點進去看看
https://ithelp.ithome.com.tw/upload/images/20230926/2012808458gWXtoA2c.png

@EnableAutoConfiguration

自動裝配就是透過這個註解來達成的,再點進去
https://ithelp.ithome.com.tw/upload/images/20230926/20128084LShklzqEYR.png

@Import({AutoConfigurationImportSelector.class})

原來是透過Import的方式將非Spring Boot package下的配置類引入,AutoConfigurationImportSelector.class怎麼做到的呢
https://ithelp.ithome.com.tw/upload/images/20230926/20128084hWLDSUbvHs.png

getAutoConfigurationEntry方法

打個斷點執行debug mode,發現這個方法中會執行getCandidateConfigurations來取得所有的候選配置類
https://ithelp.ithome.com.tw/upload/images/20230926/20128084tMAb0IMAmO.png

getCandidateConfigurations方法

找到載入的路口了,原來是透過這個文件META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
https://ithelp.ithome.com.tw/upload/images/20230926/20128084tj3aDVP2Nw.png

org.springframework.boot.autoconfigure.AutoConfiguration.imports

這個文件裡寫的通通都是XXXAutoConfiguration共146個
https://ithelp.ithome.com.tw/upload/images/20230926/20128084Fi7KTQkBcb.png

按需生效

非所有的AutoConfiguration生效,滿足@ConditionOnClass條件才會被註冊到Container中
https://ithelp.ithome.com.tw/upload/images/20230926/201280845Mw2rKrjxf.png

要被載入的AutoConfiguration共有26個

https://ithelp.ithome.com.tw/upload/images/20230926/20128084Rr5AOUHwq2.png

配置文件Application.properties生效

我們來看看tomcat server port是在那裡跟配置類組裝的,先來看看ServletWebServerFactoryAutoConfiguration
https://ithelp.ithome.com.tw/upload/images/20230926/20128084xow7hmuUzA.png

在ServletWebServerFactoryCustomizer被修改

詳細流程可以看這裡「SpringBoot server.port配置原理详解
https://ithelp.ithome.com.tw/upload/images/20230926/20128084S93oNus295.png

Reference


上一篇
Day09 - 深入理解自動配置原理之spring-boot-starter
下一篇
Day11 - Spring Boot該學到什麼樣的程度
系列文
我在 Spring Boot 3 裡面挖呀挖呀挖31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言