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

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.mrgr.cn/news/14242.html

相关文章:

  • JVM对象创建和内存分配机制深度解析
  • 鸿蒙(API 12 Beta3版)【获取音视频元数据】音频播放与录制
  • nginx部署前端vue项目完整详细讲解
  • 密码学(二)---DES、SM、RSA
  • 计算机毕业设计选题-基于python的OA办公管理系统【python-爬虫-大数据定制】
  • 虎嗅专访 | 运维数据治理如何增强业务连续性?
  • 《第二十七章 性能优化 - 内存优化》
  • 浏览器中的开源SQL可视化工具:sqliteviz
  • Linux 部署 MinIO(远程服务器)
  • boost库容器之Circular Buffer功能介绍,及使用示例
  • 某系统存在任意文件下载漏洞
  • 第二十五课,字符串操作函数(二)
  • 设计模式结构型模式之适配器模式
  • C++系列-泛型编程概念及函数模板
  • 【Redis】渐进式遍历和数据库管理
  • 推荐4款2024年专业的电脑远程控制软件。
  • 【Material-UI】Rating组件中的Rating precision属性
  • Vue.js 中使用 AG Grid 实现高性能数据表格
  • Windows 11 24H2更新实测:AMD Zen5、Zen4游戏性能提升最多35%
  • ThreeJs学习-纹理贴图、顶点UV坐标