1. 程式人生 > 其它 >spring boot starter原理解析

spring boot starter原理解析

這裡以spring-boot-starter-1.3.2為例

  1. 結構:通過 xxx-starter 下的 META-INF/spring.provides檔案指定,該檔案主要指定依賴,檔案內容如下
#這裡相當於依賴3個jar包
provides: mybatis-spring-boot-autoconfigure,mybatis,mybatis-spring
  1. starter jar包只指定了依賴,本身為空白專案

  2. 核心在xxx-autoconfigure專案,該專案有兩部分組成,

    • META-INF/xxx 目錄下的資原始檔;
    • autoconfigure目錄下的自動配置
  3. 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"
       }
  1. autoconfigure結構有xxxAutoConfiguration與xxxProperties,部分有VFS檔案

    • xxxAutoConfiguration 主要是一個@Configurtaion配置類,並讀取配置檔案以及做一個初始化配置
    • xxxProperties 讀取properties配置
    • VFS 從classpath載入bean ,比如配置:mybatis.type-aliases-package: com.test.demo.model, 通過VFS載入該model目錄下的所有bean
  2. xxxAutoConfiguration 主要依賴@xxxxCondition實現 條件依賴

       @Configuration
       @ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
       @ConditionalOnBean({DataSource.class})
       @EnableConfigurationProperties({MybatisProperties.class})
       @AutoConfigureAfter({DataSourceAutoConfiguration.class})
       public class MybatisAutoConfiguration {
       }