当前位置: 首页 > article >正文

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, 其实就是仿照框架而已


http://www.kler.cn/a/281070.html

相关文章:

  • SQLite Insert 语句
  • 筛质数zz
  • 【机器人学】7-3.六自由度机器人自干涉检测-圆柱体的旋转变换【附MATLAB代码】
  • 地平线—征程2(Journey 2-J2)芯片详解(26)—RTC+PADC/GPIO
  • Hive的数据模型
  • 机器人拾取系统关节机械臂通过NY-PN-EIPZ进行命令控制
  • 前端开发学习Docker记录01镜像操作
  • SX_c语言字符串赋值 “multiple definition of .. first defined here”问题_21
  • Java框架myBatis(三)
  • 迷雾大陆辅助:VMOS云手机助力升级装备系统秘籍!
  • Java的内存管理机制
  • 鸿蒙内核源码分析(共享内存) | 进程间最快通讯方式
  • 单项链表以及环链表
  • 数据流的交响乐:SQL在复杂事件处理中的精妙运用
  • 用powermock编写单元测试
  • 黑神话悟空-妖怪平生录PDF
  • day35-测试之性能测试JMeter的测试报告、并发数计算和性能监控
  • 人工智能开发实战TensorFlow机器学习框架解析
  • 发布预告---
  • C语⾔内存函数