一、先说人话结论
Starter = 一组“开箱即用”的依赖 + 自动配置
二、你其实已经一直在用它
比如你项目里写过:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>👉 这就是一个 Starter
三、它帮你做了什么?
当你引入:
👉spring-boot-starter-web
你其实自动获得了:
- Spring MVC
- Tomcat
- Jackson(JSON)
- 日志框架
❗ 如果没有 starter,会怎样?
你要自己一个个加:
spring-web
spring-webmvc
tomcat
jackson
logback
👉 非常麻烦
四、所以 Starter 本质是什么?
👉依赖打包 + 自动配置
五、结构拆开看(非常关键)
一个完整 Starter,其实分两部分:
① 依赖部分
引入一堆 jar 包
② 自动配置部分(重点)
@Configuration @ConditionalOnClass(...) public class XxxAutoConfiguration { }👉 这里就是你刚学的:@ConditionalOnClass
六、完整流程(你要理解)
当你写:
spring-boot-starter-web
发生了什么?
1. 引入 starter
2. starter 带来依赖(Tomcat / MVC)
3. Spring Boot 启动
4. 加载 AutoConfiguration
5. 判断条件(@Conditional)
6. 自动创建 Bean
7. 你直接能用
七、你可以这样理解(非常贴合你)
🔶 Android 类比(你肯定秒懂)
类似 SDK:
implementation 'retrofit'
👉 自动帮你:
- 网络请求能力
- JSON解析
- 线程切换
👉 Starter 就是:
后端版“功能SDK包” + 自动初始化
八、再说简单点(你记这个就够)
❗ Starter = “别人帮你封装好的一套能力包”
九、举一个你能理解的例子(关键)
如果你以后写一个:
👉ark-redis-starter
你想实现:
引入依赖 → 自动拥有 Redis 能力
你就会写:
① 自动配置
@Configuration @ConditionalOnClass(RedisTemplate.class) public class ArkRedisAutoConfig { @Bean public ArkRedisService arkRedisService() { return new ArkRedisService(); } }② 用户只需要:
<dependency> <artifactId>ark-redis-starter</artifactId> </dependency>👉 就能直接用:
@Autowired ArkRedisService redisService;十、Starter 解决了什么问题?
🔥 1. 降低使用成本
👉 不用自己配一堆东西
🔥 2. 统一规范
👉 公司内部统一技术方案
🔥 3. 插件化能力(很高级)
👉 引什么依赖 → 启什么功能
十一、你现在要不要写 Starter?
👉 ❌ 不要
原因很现实:
你现在:
- 业务链路还在打基础
- Redis / 事务 / MQ 还在熟悉
👉 写 starter 属于:框架开发能力(中高级)
总结一句最重要的话
❗Starter 是“让别人用起来很爽”的东西,不是你现在要写的东西
下一篇:
做一个极简版 starter:手写一个最小 Starter:从 0 到能看懂
👉 不讲复杂结构
👉 就让你亲手“做出一个能跑的 starter”
你会瞬间彻底理解:
- 自动装配
- @ConditionalOnClass
- starter 的意义