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 {
       }
posted @ 2021-06-26 21:13  蜗牛之履  阅读(690)  评论(0编辑  收藏  举报