登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
【自动配置魔法】Spring Boot Starter设计哲学剖析 + 实 ...
【自动配置魔法】Spring Boot Starter设计哲学剖析 + 实战自定义Starter全指南
[ 复制链接 ]
笙芝
2025-9-26 11:29:36
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
Spring Boot Starter 的设计原理
Spring Boot Starter 的核心设计目标是
简化依赖管理和自动配置
,通过约定优于配置的原则,减少开发者的手动配置工作。其设计原理主要包含以下三点:
1.
依赖聚合
原理
:每个 Starter 是一个 Maven/Gradle 依赖项,它聚合了一组相关的库(如 Spring MVC、Jackson、Tomcat 等)。
示例
:spring-boot-starter-web 包含 Spring MVC、Tomcat、Jackson 等依赖,用户只需引入一个 Starter 即可获得全套功能。
优势
:避免手动管理多个依赖的版本兼容性问题。
2.
自动配置(Auto-Configuration)
原理
:通过 @Conditional 注解(如 @ConditionalOnClass、@ConditionalOnMissingBean)实现条件化配置。
流程
:
Spring Boot 启动时扫描 META-INF/spring.factories 文件中定义的自动配置类。
根据当前项目的类路径、已存在的 Bean 等条件,动态决定是否启用配置。
示例
:当类路径存在 DataSource.class 时,自动配置嵌入式数据库(如 H2)。
3.
配置属性绑定
原理
:通过 @ConfigurationProperties 将 application.properties/yml 中的属性绑定到 Java 对象。
示例
:server.port=8080 自动绑定到内置的 ServerProperties 类。
如何自定义一个 Starter?
以下是创建自定义 Starter 的完整步骤(以
短信服务 Starter
为例):
步骤 1:创建两个模块
命名规范
:
自动配置模块:{your-service}-spring-boot-autoconfigure
Starter 模块:{your-service}-spring-boot-starter
依赖关系
:Starter 模块依赖 Autoconfigure 模块。
步骤 2:实现自动配置模块
添加 Maven 依赖
:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
复制代码
定义配置属性类
:
@ConfigurationProperties(prefix = "sms")
public class SmsProperties {
private String apiKey;
private String endpoint = "https://api.sms.com";
// Getters and Setters
}
复制代码
实现业务服务
:
public class SmsService {
private final SmsProperties properties;
public SmsService(SmsProperties properties) {
this.properties = properties;
}
public void send(String message) {
System.out.println("Sending SMS via: " + properties.getEndpoint());
// 实际调用短信 API
}
}
复制代码
创建自动配置类
:
@Configuration
@EnableConfigurationProperties(SmsProperties.class)
@ConditionalOnClass(SmsService.class) // 当 SmsService 在类路径时生效
public class SmsAutoConfiguration {
@Bean
@ConditionalOnMissingBean // 容器中无 SmsService 时创建
public SmsService smsService(SmsProperties properties) {
return new SmsService(properties);
}
}
复制代码
注册自动配置类
:
在 resources/META-INF/spring.factories 中添加:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.sms.autoconfigure.SmsAutoConfiguration
复制代码
步骤 3:创建 Starter 模块
仅需一个 POM 文件
:
<project>
<dependencies>
<dependency>
<groupId>com.example</groupId>
sms-spring-boot-autoconfigure</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>
复制代码
步骤 4:测试自定义 Starter
在项目中引入 Starter
:
<dependency>
<groupId>com.example</groupId>
sms-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
复制代码
添加配置
(application.properties):
sms.api-key=YOUR_API_KEY
sms.endpoint=https://custom.sms.api # 可选(覆盖默认值)
复制代码
直接注入使用
:
@RestController
public class MyController {
private final SmsService smsService;
public MyController(SmsService smsService) {
this.smsService = smsService;
}
@PostMapping("/send")
public void sendSms() {
smsService.send("Hello World!");
}
}
复制代码
关键注意事项
避免包扫描冲突
:
将自动配置类放在独立的包(如 com.example.autoconfigure),避免被主应用的 @ComponentScan 扫描到。
条件化配置
:
合理使用 @Conditional 注解,确保 Starter 只在满足条件时生效。
提供元数据提示
:
在 META-INF/spring-configuration-metadata.json 中定义配置属性的提示信息,增强 IDE 支持。
模块化设计
:
将 Starter 拆分为 autoconfigure 和 starter 两个模块,符合官方标准结构。
通过以上设计,自定义 Starter 能够无缝集成 Spring Boot 的自动配置机制,用户只需添加依赖和简单配置即可获得开箱即用的功能。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
Starter
自动
配置
魔法
Spring
相关帖子
html自动跳转代码
人脸识别项目如何在Spring Boot项目中如何建立数据库和管理
CentOS7/8在线yum源自动设置
自动跳转的js代码
html自动跳转代码合集
扣子Coze实战:智能体(Agent)1分钟自动仿写公众号爆文,一键自动发布
嵌入式系统内存魔法之分散加载
嵌入式系统内存魔法之分散加载
咱们聊聊Spring循环依赖那点事儿:从“死锁”到“三级缓存”的奇妙之旅
ACP:让 AI 编程工具配置从此告别碎片化 —— 一款开源的 AI 配置管理平台
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
代码
html自动跳转代码
3
42
新程序
2025-12-07
业界
人脸识别项目如何在Spring Boot项目中如何建立数据库和管理
0
390
赖秀竹
2025-12-11
业界
CentOS7/8在线yum源自动设置
0
341
艾晓梅
2025-12-11
代码
自动跳转的js代码
1
24
新程序
2025-12-11
代码
html自动跳转代码合集
0
27
新程序
2025-12-11
业界
扣子Coze实战:智能体(Agent)1分钟自动仿写公众号爆文,一键自动发布
0
17
高小雨
2025-12-13
业界
嵌入式系统内存魔法之分散加载
0
845
坪钗
2025-12-13
业界
嵌入式系统内存魔法之分散加载
0
760
梅克
2025-12-13
业界
咱们聊聊Spring循环依赖那点事儿:从“死锁”到“三级缓存”的奇妙之旅
0
695
赏听然
2025-12-14
业界
ACP:让 AI 编程工具配置从此告别碎片化 —— 一款开源的 AI 配置管理平台
0
769
哈妙思
2025-12-16
回复
(3)
致掣
2025-10-26 02:43:04
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢楼主提供!
娥搽裙
2025-11-1 01:15:50
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
东西不错很实用谢谢分享
府扔影
前天 17:00
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
喜欢鼓捣这些软件,现在用得少,谢谢分享!
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
代码
科技
签约作者
程序园优秀签约作者
发帖
笙芝
前天 17:00
关注
0
粉丝关注
20
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994893
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9998
6
宋子
9983
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
338
【节点】[Adjustment-WhiteBalance节点]原
298
上海专业建筑维修服务解析:标准化流程如何
942
【分析式AI】-带你弄懂XGBoost模型
728
【分析式AI】-带你弄懂XGBoost模型
48
【分析式AI】-带你弄懂XGBoost模型
270
C语言之统计天数
237
如何使用DashVector的多向量检索
270
【分析式AI】-朴素贝叶斯算法模型
215
【分析式AI】-朴素贝叶斯算法模型
933
【睿擎派】EtherCAT总线之IO模块读写
587
python3.13 3.14 新特性 好好好
783
Python新利器:用uv轻松管理venv虚拟环境和
956
Open-AutoGLM项目衍生自研app测试思路
180
.Net-Avalonia学习笔记(目录)
435
PoloAPI 绘画接口全攻略:从参数详解到实战
144
剑指offer-50、数组中重复的数字
179
嫌 Google 的 TCREI 太复杂?RACE 会更适合
975
Spring Boot中HTTP请求参数转换和请求体JSO
531
AI手机的“简单替换陷阱”与Hadoop、Cloude
474
用C#重现Gin风格:极简、效率与可扩展性设