登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
业界
›
【自动配置魔法】Spring Boot Starter设计哲学剖析 + 实 ...
【自动配置魔法】Spring Boot Starter设计哲学剖析 + 实战自定义Starter全指南
[ 复制链接 ]
笙芝
2025-9-26 11:29:36
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
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
相关帖子
Spring Cloud微服务实战:服务注册、网关、负载均衡全家桶指南
Spring Boot 4.0.5 正式发布,又一项技术被弃用了。。
分享 5 种 .NET 桌面应用程序自动更新解决方案
使用Alpine配置WSL ssh门户
使用Alpine配置WSL ssh门户
使用Alpine配置WSL ssh门户
使用Alpine配置WSL ssh门户
我用 SubAgent 做了一个 AI 自动修复闭环:流式修代码、自动构建、失败重试
Spring AI实战:10分钟接入OpenAI实现流式对话
Spring AI Alibaba 人工介入实战|Human-in-the-Loop 让 AI 更可靠
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
Spring Cloud微服务实战:服务注册、网关、负载均衡全家桶指南
0
532
秦晓曼
2026-03-28
安全
Spring Boot 4.0.5 正式发布,又一项技术被弃用了。。
0
674
魄柜
2026-03-30
业界
分享 5 种 .NET 桌面应用程序自动更新解决方案
0
1003
寥唏
2026-03-30
业界
使用Alpine配置WSL ssh门户
0
1011
郁梓馨
2026-03-30
业界
使用Alpine配置WSL ssh门户
0
176
瞧厨
2026-03-30
业界
使用Alpine配置WSL ssh门户
0
349
任俊慧
2026-03-30
业界
使用Alpine配置WSL ssh门户
0
523
士沌
2026-03-30
安全
我用 SubAgent 做了一个 AI 自动修复闭环:流式修代码、自动构建、失败重试
0
784
挽幽
2026-03-30
安全
Spring AI实战:10分钟接入OpenAI实现流式对话
0
485
赊朗爆
2026-03-31
业界
Spring AI Alibaba 人工介入实战|Human-in-the-Loop 让 AI 更可靠
0
262
孟清妍
2026-03-31
回复
(33)
致掣
2025-10-26 02:43:04
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢楼主提供!
娥搽裙
2025-11-1 01:15:50
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
东西不错很实用谢谢分享
府扔影
2025-12-14 17:00:58
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
喜欢鼓捣这些软件,现在用得少,谢谢分享!
溥价
2025-12-17 16:48:05
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
旌磅箱
2025-12-21 10:29:00
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
新版吗?好像是停更了吧。
祝安芙
2026-1-6 07:35:19
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢楼主提供!
蚬蕞遂
2026-1-6 19:44:37
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢楼主提供!
豹筒生
2026-1-11 13:11:15
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,辛苦了
福清婉
2026-1-20 17:10:35
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
很好很强大 我过来先占个楼 待编辑
椎蕊
2026-1-21 06:39:05
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享,下载保存了,貌似很强大
圣罩
2026-1-21 13:39:56
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享,下载保存了,貌似很强大
钱艷芳
2026-1-22 10:43:08
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
不错,里面软件多更新就更好了
煅汾付
2026-1-26 10:03:39
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
东西不错很实用谢谢分享
稞冀
2026-1-28 08:48:52
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢,下载保存了
稿辏付
2026-1-30 06:55:58
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
用心讨论,共获提升!
轧岔
2026-2-3 07:39:15
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享
衣旱
2026-2-5 07:45:24
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
用心讨论,共获提升!
师佳思
2026-2-6 08:32:20
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
yyds。多谢分享
陈兰芳
2026-2-7 08:30:54
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢发布原创作品,程序园因你更精彩
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
科技
签约作者
程序园优秀签约作者
发帖
笙芝
2026-2-7 08:30:54
关注
0
粉丝关注
23
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9539
6
宋子
9880
7
韶又彤
9911
8
注思
9034
9
荪俗
9023
10
诀锺
9036
查看更多
今日好文热榜
645
【ESP32】ESP32 使用 MQTT 连接华为云 IoT
770
Axios遭供应链投毒攻击(附排查与紧急补救
931
AI 可以取代运维了吗?
83
测试人必备的4个AI Skills(附下载地址和详
74
记一次Webshell流量分析2 | 添柴不加火
453
记一次Webshell流量分析2 | 添柴不加火
139
记一次Webshell流量分析2 | 添柴不加火
727
记一次Webshell流量分析2 | 添柴不加火
68
记一次Webshell流量分析2 | 添柴不加火
412
AI元人文:在荆棘中开路——对四个实践性追
930
记一次Webshell流量分析2 | 添柴不加火
3
Python模块与包管理完全指南:从入门到精通
422
记一次Webshell流量分析2 | 添柴不加火
2
Python模块与包管理完全指南:从入门到精通
271
AI元人文:在荆棘中开路——对四个实践性追
577
记一次Webshell流量分析2 | 添柴不加火
86
记一次Webshell流量分析2 | 添柴不加火
160
记一次Webshell流量分析2 | 添柴不加火
876
记一次Webshell流量分析2 | 添柴不加火
148
记一次Webshell流量分析2 | 添柴不加火