write your own xx-starter【1】

在springboot 中,我们加入例如mybatis-spring-boot-starter,接着在application.yml配置数据库信息,就可以使用mybatis了,无需我们手动进行配置

这就是springboot威力,那么他是如何实现的呢?简单来说类似于java SPI机制, 通过在启动容器的某个阶段,加载某个路径下特殊文件中的类来实现自动配置
在这里插入图片描述
实际上这个文件就是位于META-INF/spring.factories
我们可以看到内容为k=v的形式,k为org.springframework.boot.autoconfigure.EnableAutoConfiguration
v为配置类,多个以逗号隔开

其中我们看到MybatisAutoConfiguration的全类名
在这里插入图片描述
打开我们发现在MybatisAutoConfiguration上面有很多注解
@Configuration 表示是一个配置
@ConditionalOnClass 注入条件——类路径包含某个类情况
@ConditionalOnSingleCandidate 注入条件——表示存在某个类型的唯一bean
@EnableConfigurationProperties 启用对@ConfigurationProperties的支持,一般他俩一起使用来读取配置文件(application.yml)中的信息
@AutoConfigureAfter确保某个配置类在其他配置类之后加载

这些条件注解,决定了bean要不要加载到spring 容器中,以及加载顺序

在这个类中有一些bean配置
在这里插入图片描述

看到例如sqlSessionTemplate 和sqlSessionFactory等我们常用的bean, 原来都在这里给我们配置好了

看到这里我们就大致明白了,其实就是xxx-starter在背后帮我们做了一些工作

总的来说springboot自动去获取spring.factories中的自动配置类信息,进行扫描,被扫描的配置类根据项目环境条件注入bean

细心的朋友还可以发现其实上面的spring.factories和MybatisAutoConfiguration都在mybatis-spring-boot-autoconfigurer中,我们项目一般依赖的是mybatis-soring-boot-starter,其实是为了职责清晰,starter中只包含pom文件pom文件又依赖autoconfigurer而已

关于何时去扫描的这些配置类,答案在springboot的启动流程里,想了解的可以自行学习

下一篇实现一个自定义的starter, 其实就是仿照框架而已

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值