昨天我們了解多數的場景啟動器都會包含spring-boot-starter這個dependency,它將各個式各樣功能的配置類放到classpath中,一旦ConditionOnXXX條件成立,那麼配置類就會生效,我們就可以使用該功能。還記得我們曾經說過的,Spring Boot預設的ComponentScan是在它自己的包下與其子包才會被掃描註冊到Container中,那麼到底Spring Boot是如何將autoconfigure下的配置類註冊到Container中的呢,今日我們就來討論這個議題。
server.port = 9999
我們從@SpringApplcation開始來看吧
點進去看看
自動裝配就是透過這個註解來達成的,再點進去
原來是透過Import的方式將非Spring Boot package下的配置類引入,AutoConfigurationImportSelector.class怎麼做到的呢
打個斷點執行debug mode,發現這個方法中會執行getCandidateConfigurations來取得所有的候選配置類
找到載入的路口了,原來是透過這個文件META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
這個文件裡寫的通通都是XXXAutoConfiguration共146個
非所有的AutoConfiguration生效,滿足@ConditionOnClass條件才會被註冊到Container中
我們來看看tomcat server port是在那裡跟配置類組裝的,先來看看ServletWebServerFactoryAutoConfiguration
詳細流程可以看這裡「SpringBoot server.port配置原理详解」