spring boot starter原理解析
阿新 • • 發佈:2021-06-26
這裡以spring-boot-starter-1.3.2為例
- 結構:通過 xxx-starter 下的 META-INF/spring.provides檔案指定,該檔案主要指定依賴,檔案內容如下
#這裡相當於依賴3個jar包
provides: mybatis-spring-boot-autoconfigure,mybatis,mybatis-spring
-
starter jar包只指定了依賴,本身為空白專案
-
核心在xxx-autoconfigure專案,該專案有兩部分組成,
- META-INF/xxx 目錄下的資原始檔;
- autoconfigure目錄下的自動配置
-
META-INF目錄有兩個核心檔案spring.factories和 xx-metadata.json , spring.factores使用spi機制,查詢自動裝配的實現類, metadata.json定義了預設屬性配置,該檔案可以可作為yml配置的參考檔案
## spring.factories檔案示例
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
## matadata.json檔案示例, 這裡表示配置 mybatis.configuration.default-executor-type 與 mybatis.configuration.default-fetch-size { "sourceType": "org.apache.ibatis.session.Configuration", "name": "mybatis.configuration.default-executor-type", "type": "org.apache.ibatis.session.ExecutorType" }, { "sourceType": "org.apache.ibatis.session.Configuration", "name": "mybatis.configuration.default-fetch-size", "type": "java.lang.Integer" }
-
autoconfigure結構有xxxAutoConfiguration與xxxProperties,部分有VFS檔案
- xxxAutoConfiguration 主要是一個@Configurtaion配置類,並讀取配置檔案以及做一個初始化配置
- xxxProperties 讀取properties配置
- VFS 從classpath載入bean ,比如配置:mybatis.type-aliases-package: com.test.demo.model, 通過VFS載入該model目錄下的所有bean
-
xxxAutoConfiguration 主要依賴@xxxxCondition實現 條件依賴
@Configuration
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
@ConditionalOnBean({DataSource.class})
@EnableConfigurationProperties({MybatisProperties.class})
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
public class MybatisAutoConfiguration {
}