SpringBoot 自定义 Starter 实现
一、定义,什么是Starter
SpringBoot Starter 是”一站式服务(one-stop service)“的依赖 Jar 包:
- 包含 Spring 以及相关技术(比如Redis)的所有依赖
- 提供了自动配置的功能,开箱即用
- 提供了良好的依赖管理,避免了包遗漏、版本冲突等问题
旨在简化Spring Boot 项目的开发和配置过程。通过引入Starter依赖,开发者可以快速集成各种功能模块,例如Web应用程序、数据库访问、消息队列等。
具体来说,Starter的主要作用包括以下几个方面:
- 简化配置:Starter封装了特定技术或功能的所有必要依赖项和配置,使开发者能够快速将这些功能集成到Spring Boot项目中,而无需手动编写大量配置代码。
- 自动装配:Starter利用Spring Boot的自动装配机制,通过扫描类路径下的META-INF/spring.factories 文件中的EnableAutoConfiguration指定的所有自动配置类,并将其导入容器进行自动配置。
- 版本管理:Starter还维护了对相关Jar包版本的依赖关系,使得开发者不需要关心各个组件之间的版本兼容性问题。
- 约定优于配置:Spring Boot采用“约定优于配置”的策略,通过提供默认配置选项,让开发者在使用时只需少量的配置即可启动应用。
此外,Spring Boot官方提供了大量日常企业应用研发的各种场景的Starter依赖模块,如spring-boot-starter-web用于Web开发,spring-boot-starter-data-redis用于集成Redis等。这些Starter不仅方便了开发者快速搭建项目,还提高了开发效率和项目的可维护性。
总之,SpringBoot Starter是一种非常重要的机制,通过预打包的依赖和自动配置,极大地简化了Spring Boot项目的开发和部署过程,使开发者能够更专注于业务逻辑的实现。
Starter的结构如下图:

二、MyBatis starter的示例
mybatis starter 比 redis starter更规范
maven依赖:
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.0</version>
</dependency>

查看starter类,里面依赖了Mybatis所需的jar包,除此之外,有一个负责自动配置的配置包;
通过查看spring.factories,其Mybatis的配置,
key:org.springframework.boot.autoconfigure.EnableAutoConfiguration
value是:org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
(values值多个以逗号(“,”)相隔 ,每个value为一个配置类)

@ConditionalOnClass 表示在类存在的情况下进行自动配置
@EnableConfigurationProperties,使@ConfigurationProperties注解生效,把 MybatisProperties注入入到 IOC 容器中。
@AutoConfigureAfter,完成自动配置后实例化这个 bean
通过查看 mybatis-spring-boot-starter,可以发现starter包很简单,没有class文件,只是把starter当做一个相对完整的模块的入口,通过pom文件引入其模块依赖的jar包和配置包,在项目上需要使用此模块时,只需引入这个依赖即可。
三、自定义Spring Boot Starter
1、需求

2、痛点
marketing 项目如何 **”一站式“ **地调用 user 中的接口
- 不用关心被调用接口的uri;
- 不需要自行构建被调用接口的参数和返回值的类型;
最佳实践:使用 SpringBoot 的自动配置,构建 user项目的 starter
3、项目代码
项目结构

参考
推荐:硬核干货!SpringBoot自动配置实战项目,从0开始手撸Starter
简述SpringBoot Starter原理及自定义实现
相关文章:
SpringBoot 自定义 Starter 实现
一、定义,什么是Starter SpringBoot Starter 是”一站式服务(one-stop service)“的依赖 Jar 包: 包含 Spring 以及相关技术(比如Redis)的所有依赖提供了自动配置的功能,开箱即用提供了良好的…...
「Spring MVC」Session、Cookie
🎇个人主页:Ice_Sugar_7 🎇所属专栏:JavaEE 🎇欢迎点赞收藏加关注哦! Spring MVC 🍉Session & Cookie🍌联系与区别 🍉获取 Cookie🍉存储 & 获取 Sess…...
Java虚拟机:垃圾回收器
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 037 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自…...
ES6-ES13学习笔记
初识ES6 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 1997年:EC…...
【Qt开发】QtCharts图表——在ui上添加QChartView控件并进行绘图配置
【Qt开发】QtCharts图表——在ui上添加QChartView控件并进行绘图配置 文章目录 控件安装和模块导入在ui上添加QChartView控件QChartView图表配置附录:C语言到C的入门知识点(主要适用于C语言精通到Qt的C开发入门)C语言与C的不同C中写C语言代码…...
Android14 屏幕录制(屏幕投影)和音频播放采集
Android 5开始支持屏幕采集, Android 10支持音频播放采集,不过Android 14用前台服务做屏幕录制时要增加一些处理. 1. app manifest 需要增加: <manifest><uses-permission android:name"android.permission.FOREGROUND_SERVICE" /><uses…...
一行实现88个群智能算法优化混合核极限学习机HKELM的多特征输入单输出的数据回归预测Matlab程序全家桶
一行实现88个群智能算法优化混合核极限学习机HKELM的多特征输入单输出的数据回归预测Matlab程序全家桶 文章目录 前言一行实现88个群智能算法优化混合核极限学习机HKELM的多特征输入单输出的数据回归预测Matlab程序全家桶 一、HKELM模型1. 极限学习机(ELM࿰…...
redis面试(十五)公平锁队列重排
队列重拍 先说一下当前的加锁状态 anyLock由客户端A持有队列中是客户端B、客户端C并且客户端B现在是排在头部 那么队列重拍就是队列中某个客户端长时间没有重新申请加锁,没有刷新分数,就会被队列中挤掉。 假设这个长时间没有加锁的客户端是B。 总结 …...
python 基础语法os模块
一、os模块 待总结 二、os.path模块 1.abspath()方法--获取绝对路径 abspathO)方法用于返回文件或者目录的绝对路径。 语法格式如下: os .path.abspath(path) 参数说明: path:表示要获取绝对路径的相对路径,可以是文件也可以是目录。 返回值:返回获取到的绝…...
图论------迪杰斯特拉(Dijkstra)算法求单源最短路径。
编程要求 在图的应用中,有一个很重要的需求:我们需要知道从某一个点开始,到其他所有点的最短路径。这其中,Dijkstra 算法是典型的最短路径算法。 本关的编程任务是补全右侧代码片段中 Begin 至 End 中间的代码,实现 …...
河工院首届工业设计大赛程序组(挑战赛)题解
更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 寻找ACMer 思想: 签到题按照题意遍历字符串,不断向后寻找包含 ACMer 完整字符串的数量即可 std标程: #include <iostream> #include <cstring> #include …...
文件上传漏洞(二,靶场搭建及漏洞利用)
前言: 本文基于github上的upload-labs,PHP study以及bp抓包软件进行操作。 一,靶场搭建。 靶场链接 1,下载zip文件到PHP study下的www文件夹内,并解压。 2,创建网站。 此处php版本应选择较老版本&…...
大厂面试题分享第二期
大厂面试题分享第二期 如果执行了一条命令,"select count(*)from…",使用哪个引擎更快,为什么?垃圾回收器 CMS 和 G1的区别介绍一下CMS和G1CMS(并发)垃圾收集器G1垃圾回收器 HTTPS和HTTP的区别主…...
zabbix安装
a.安装 Zabbix 仓库 # rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm # yum clean all b. 安装 Zabbix server、前端、agent # yum install zabbix-server-mysql zabbix-agent c. 安装Zabbix前端 启用红帽软件集合 # …...
SpringBoot集成日志框架
SpringBoot集成日志框架 Java生态体系日志框架介绍 简介 在Java生态体系中,围绕着日志,有很多成熟的解决方案。关于日志输出,主要有两类工具。 一类是日志框架(Log4j、Logback),主要用来进行日志的输出的…...
CSS笔记总结(Xmind格式):第三天
Xmind鸟瞰图: 简单文字总结: css知识: 边框线: 1.border-width:边框的粗细 2.border-style:边框线的样式(solid实线,double双实线,dotted点线,dashed虚线) 3.border-color:边框线的颜色 4.简写形式&a…...
WordPress原创插件:Keyword-ranking-seo 1.0 关键词排名插件 有利于seo
WordPress原创插件:Keyword-ranking-seo 1.0 关键词排名插件 有利于seo 当用户访问网站时,该链接会随机选择一个关键词,并使用选定的搜索引擎进行搜索。 插件下载链接 https://download.csdn.net/download/huayula/89632792...
Docker Swarm 管理
Docker Swarm 是 Docker 提供的一种用于管理容器集群的工具。一、Docker Swarm 的主要特点包括: 高可用性:可以自动检测和恢复故障节点,确保服务的持续可用性。 例如,当某个工作节点出现故障时,Swarm 会将其上的任务重…...
跨平台、多格式、云同步,Koodo Reader背后的技术亮点
前言 对于像我这样的书虫来说,能够找到一个既方便又舒适的阅读环境,简直就是人生中的一大幸事;今天,就让小江湖我带你走进一个不一样的阅读世界——Koodo Reade! 无论是在喧嚣的都市,还是在宁静的乡村&a…...
【Story】如何高效记录并整理编程学习笔记?
目录 一、为何笔记在编程学习中如此重要?1.1 知识的捕捉1.2 理解和消化1.3 知识的复习1.4 知识的分享 二、建立高效的笔记系统2.1 确定笔记的目标2.2 选择合适的工具2.3 笔记的结构化2.4 记录有效的内容2.5 定期回顾和更新 三、保持笔记条理性的技巧3.1 使用一致的格…...
【Spark实战指南】RDD核心操作与数据分析实战(附完整代码)
1. RDD基础与实战环境搭建 RDD(Resilient Distributed Dataset)是Spark最核心的数据抽象,你可以把它理解成一个分布式的数据集合,但比普通集合更强大。想象你有一本超大的电话簿被撕成很多页,分给不同的人保管——RDD就…...
C#实战:基于WebAPI与Modbus构建EMS核心采集服务
1. 为什么需要EMS核心采集服务? 在工业现场,我们经常会遇到几十台甚至上百台智能电表、传感器等设备需要监控。这些设备可能来自不同厂家,使用不同的通信协议,数据格式也各不相同。想象一下,如果每个设备都需要单独开发…...
植物大战僵尸修改工具实战指南:从入门到精通
植物大战僵尸修改工具实战指南:从入门到精通 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 认知阶段:工具核心价值与基础架构 工具定位与适用场景 植物大战僵尸修改工具是…...
MyBatis 中 CDATA 的实战应用与避坑指南
1. 为什么MyBatis需要CDATA 在MyBatis的日常开发中,我们经常需要在XML映射文件中编写SQL语句。但XML本身对特殊字符有着严格的限制,比如小于号(<)、大于号(>)、和号(&)等字符在XML中都有特殊含义。这就导致了一个很现实的问题:当我…...
OpenClaw语音控制:nanobot对接Whisper实现声控自动化
OpenClaw语音控制:nanobot对接Whisper实现声控自动化 1. 为什么需要语音控制自动化 作为一个长期与命令行打交道的开发者,我一直在寻找更自然的交互方式。键盘输入固然高效,但在某些场景下——比如双手被占用时调试代码、厨房里边做饭边查菜…...
嵌入式Linux驱动开发核心技术解析
嵌入式Linux驱动工程师面试技术要点解析1. Linux驱动开发核心技术考察1.1 进程同步机制Linux内核提供了多种进程同步机制,包括:信号量(Semaphore):用于控制对共享资源的访问互斥锁(Mutex)&#…...
为什么3分钟搞懂AI
炒又幕燃、RedisShake 核心介绍 RedisShake 是阿里云 Tair 开源团队推出的轻量级Redis数据处理工具,无需复杂依赖,部署简单、操作便捷,能适配自建Redis、云Redis等多种环境,解决Redis全生命周期的数据管理难题。 1.1 四大核心功能…...
深度解析Windows微信自动化:Wechaty Puppet XP零成本架构设计与实战指南
深度解析Windows微信自动化:Wechaty Puppet XP零成本架构设计与实战指南 【免费下载链接】puppet-xp Wechaty Puppet WeChat Windows Protocol 项目地址: https://gitcode.com/gh_mirrors/pu/puppet-xp 在即时通讯自动化领域,Windows平台微信机器…...
3个高效能的核心功能:League-Toolkit开源工具效率提升指南
3个高效能的核心功能:League-Toolkit开源工具效率提升指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Too…...
RSA宣布与Microsoft扩大合作,进一步巩固公司在无密码身份安全领域的领导地位
创新合作开启安全、基于人工智能的员工身份验证新时代 RSA今日在RSAC 2026大会上宣布,将扩大对全新Microsoft 365 E7:The Frontier Suite解决方案的支持。这一新增支持结合了额外的无密码功能,在企业拥抱人工智能驱动的生产力未来之际&#…...
