1. 關鍵特性
- 引入依賴
- 自動配置
2. 引入依賴
將常用依賴進行組合分類,打包提供給具有相應特性的工程;
"它使用了maven和gradle的依賴傳遞方案,starter在自己的pom.xml文件中聲明瞭多個依賴。……一個starter可能會傳遞性地引入幾十個依賴。"
starter之間引用依賴傳遞關係如圖:
3. 自動配置
如果“自動配置類”① “探測”② 到類路徑下存在對應的依賴③,就會“配置”④ 使用這些依賴的工具bean⑤。
①. 在<spring-boot-autoconfigure>依賴中,依賴有自己對應的自動配置類:xxxAutoConfiguration。例如:<spring-boot-starter-data-mongodb>對應給它的自動配置類名稱:MongoAutoConfiguration;
②. “利用Spring對條件化配置的支持”(即@Condition註解,springboot在此基礎上提供了@ConditionalOnClass、@ConditionalOnMissingBean等條件化配置註解),當依賴的“特徵”類存在在類路徑下,才實例化對應的實現了該依賴必要配置的自動配置類;
還是以MongoAutoConfiguration類爲例,它的源碼如下:
package org.springframework.boot.autoconfigure.mongo;
import ...
@Configuration
@ConditionalOnClass({MongoClient.class})
@EnableConfigurationProperties({MongoProperties.class})
@ConditionalOnMissingBean(
type = {"org.springframework.data.mongodb.MongoDbFactory"}
)
public class MongoAutoConfiguration {
...
}
③. 所謂依賴即一些列jar包,jar包裏存在實現功能相關的class文件;
④. 所謂配置即實例化bean的對象在容器中;(Spring原理)
⑤. 以SpringMVC爲例,工具類包括:視圖解析器、資源處理器以及消息轉換器等;
附
參考:《Spring實戰(第4版)》