Spring和SpringBoot发开的时候有一个很大的区别就是:我们在用SpringBoot的时候只需要引入对应的spring-boot-starter-xxx(第三方命名规则:xxx-spring-boot-starter)就能使用对应的组件做开发了。
Starter
一般没有业务逻辑代码,被第三方引入的入口,起到一个包装、统筹的作用。还有引入一个与之对应的Autoconfigure工程
Autoconfigure
这里会包含三类文件:
- xxxAutoConfiguration(用@Configuration标注,告诉SpringBoot这是一个配置类)
- 真正的业务逻辑组件和配置文件类(用@EnableConfigurationProperties注解引入
的xxxProperties,然后被业务逻辑组件引用获取属性值) - META-INFO/spring.factroies文件
关系图例
mybatis的启动器事例
mybatis的starter和autoconfigure中的各个模块
MybatisAutoConfiguration(被@Configuration注解标注)中通过@Bean把我们开发中需要用到的SqlSessionFactory实例对象注入到IOC中,SqlSessionFactory的属性从MybatisProperties对象中获取的
mybatis的starter通过pom把对应的mybatis的autoconfigure依赖进来了
使用mybatis
接下来使用mybatis的话就很简单了,直接在pom.xml中引入mybatis的启动器就可以使用了
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
自定义启动器
如果你有自定Starter的需求的话,只需要实现上图深蓝色部分就可以了,接下来的事情就交给SpringBoot了
spi(听到spi后有没有想到api?)相关解答,这里附上知乎大神的解答:https://zhuanlan.zhihu.com/p/28909673