write your own xx-starter【1】

news2024/9/20 0:20:51

在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.coloradmin.cn/o/2083293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java面向接口编程—习题

Java面向接口编程—习题 Java面向接口编程—习题 Java面向接口编程—习题需求实现思路具体步骤1.步骤一:创建接口2.步骤2:创建接口的实现类3.步骤3:创建一个厂商4.步骤四:创建测试类 需求 说明采用面向接口编程思想组装一台计算机计算机的主…

【RabbitMQ工作原理相关】

RabbitMQ如何保证消息不丢失 开启生产者确认机制,确保生产者的消息能到达队列开启持久化功能,确保消息未消费前在队列中不会丢失开启消费者确认机制为auto,由spring确认消息处理成功后完成ack开启消费者失败重试机制,多次重试失败后将消息投递到异常交换机,交由人工处理 Rabb…

Linux Debian12安装Peek录屏软件,录制gif动态图

一、Peek安装 在Debian 12 (codenamed “Bookworm”) 上安装 Peek 录屏软件,可以通过以下步骤进行: 1.打开终端。 2.更新系统的包索引: sudo apt update3.安装 Peek 的依赖项: sudo apt install peek如果你遇到问题&#xff…

【大模型LLMs】文本分块Chunking调研LangChain实战

【大模型LLMs】文本分块Chunking调研&LangChain实战 Chunking策略类型1. 基于规则的文本分块2. 基于语义Embedding分块3. 基于端到端模型的分块4. 基于大模型的分块 Chunking工具使用(LangChain)1. 固定大小分块(字符&token&#xff…

IC-Light还原细节的节点 DetailTransfer使用时报错-comfyui

🎈问题描述 今天在调试一个工作流节点的时候,遇到一个问题: Error occurred when executing DetailTransfer: The size of tensor a (848) must match the size of tensor b (853) at non-singleton dimension 2 File "F:\ComfyUI-aki\…

Volvo EDI 项目测试流程详解

近期知行帮助多个供应商成功对接Volvo EDI,这些案例中,供应商收到Volvo发来的EDI需求是基本一致的: 传输协议选择OFTP报文标准选择EDIFACT业务单据包括:DELFOR交付预测以及DESADV发货通知 扩展阅读:汽车EDI&#xff…

车规级CAN总线外围电路设计方案

目录 1、共模电感 1.1、电感值 1.2、泄漏电感 1.3、直流电阻 1.4、CMC的模式转换特性 2、终端分立电阻 3、总线电容 4、ESD保护二极管 在汽车领域,电磁兼容性(EMC)问题一直备受瞩目。相较于传统汽车,新能源汽车的EMC挑战更…

如何使用ssm实现社区智慧养老监护管理平台+vue

TOC ssm270社区智慧养老监护管理平台vue 系统概述 1.1 研究背景 智慧养老是面向居家老人、社区及养老机构的传感网系统与信息平台,并在此基础上提供实时、快捷、高效、低成本的,物联化、互联化、智能化的养老服务。 随着科技进步,新型养…

无法启动此程序,因为计算机中丢失dll,整理了7种解决方法!

当电脑出现“无法启动此程序,因为计算机中丢失dll”的错误弹窗时,这通常意味着系统中的DLL文件出现了缺失或错误。DLL文件是动态链接库文件,它们在软件运行中起着至关重要的作用。 造成dll文件缺失和错误的原因有很多,大部分问题都…

git clone 别人的项目上传到自己的Gitee或者github仓库

git clone别人的项目 git clone https://github.com/wohuweixiya/yft-design.git 进入该项目内,删除原有的.git信息 rm -r .git 初始化.git git init 将本地代码添加到仓库 git add . git commit -m "提交仓库说明" Github上新建一个和这个clone下来…

【快速选择算法】解决TopK问题中前K小的数字问题

目录 1.前言2.题目简介3.求解思路4.示例代码 1.前言 在一个数组中找到这个数组前K小的数字有三种方式: 排序 O(N*logN)堆排序:建立一个k个大小的大堆(如果是找前K大的数字的话用小堆) O(N*logK)快速选择算法:原地交换数字,使得该…

数据结构---单链表(常见的复杂操作)

目录 一、单链表 1.1.查找中间元素 1.2.查找倒数第K个节点 1.3.链表倒置 1.4.冒泡排序 1.5.选择排序 1.6.环,确认有环单链表的环入口和环大小 二、总结 一、单链表 1.1.查找中间元素 定义两个指针,分别指向第一个元素,第一个指针每次向后…

开源的工作流系统突出优点总结

当前,想要实现高效率的办公,可以一起来了解低代码技术平台、开源的工作流系统的相关特点和功能优势。作为较受职场喜爱的平台产品,低代码技术平台拥有可视化才做界面、灵活、好维护操作等多个优势特点,在推动企业流程化办公的过程…

在线生成书法字帖,想练习什么字就练习什么字

有没有想练习一个字的时候发现找不到字帖的情况,现在推荐一款在线生成字帖的网站 可选择对应格子类型,生成你想练习的字 在线生成字帖

【简历】25届北京某211JAVA简历:外卖项目要点像玩一样

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 这是一份北京某211大学的java简历。上来第一要点还是要先确定求职层次,那211同学就不要想了,就一个目标&#xf…

mysql 死锁 锁表的解决方法

查看那个表锁了 SHOW OPEN TABLES where In_use > 0; show processlist SELECT * FROM information_schema.INNODB_TRX; 查看锁的进程 kill 掉进程id (trx_mysql_thread_id)

CAD中命令和系统变量

屏幕去除菜单全屏显示: ThisDrawing.SendCommand ("CLEANSCREENON ") 恢复原始:ThisDrawing.SendCommand ("CLEANSCREENOFF ") CAD中系统变量决定图形的基本设置。 第一个系统变量:uscicon vba代码如下: …

Flink CDC读取Mysql时,Decimal类型数据异常,变成了字符串(源码解析及解决方案)

1. 问题说明 使用Flink CDC 读取mysql数据时,当表字段为decimal时,读取的数据变成了字符串。 如下示例: 环境: Flink 1.18.0 Flink CDC 3.1.1 mysql 8 mysql的数据如下: 使用Flink CDC读取后的数据如下: 为了方便看,复制出来就是: {“id”:1,“price”:“AZA=”,…

时尚新潮流来袭!Kolors 一键试衣,畅享轻松购物

时尚新潮流来袭!Kolors 一键试衣,畅享轻松购物 解决他们的烦恼话不多说,三键拿下Kolors 优点小结 时尚新潮流:虚拟试衣,开启便捷购物之旅🎀 🌟 你还在为网购试衣服不合适而烦恼吗?现…

OSI和TCP/IP参考模型、协议与端口、DNS解析类型、数据封装

目录 1.OSI和TCP/IP参考模型 1.1 为什么要进行网络分层? 1.2 TCP/IP和OSI参考模型 1.3 TCP/IP参考模型对应协议 2.对应协议和端口 3.基于IP的封装 4.DNS解析类型 5.数据封装与解封过程分析 5.1 封装 1.OSI和TCP/IP参考模型 1.1 为什么要进行网络分层&am…