spring boot starter原理解析
这里以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 {
}