SpringBoot 底层原理完整教程(下篇・起步依赖 + 自动配置 + 自定义 Starter) 📅 2026/6/30 22:48:28 承接上篇配置、中篇 IOC Bean 管理本篇深挖 SpringBoot 两大核心灵魂特性起步依赖、自动配置完整拆解启动注解三层源码、条件装配注解、四种 Import 导入方式最后落地企业级自定义 starter 完整开发流程是面试压轴高频深度考点。一、SpringBoot 两大核心优势总览原生 Spring 框架痛点手动管理海量 Maven 依赖、版本冲突、大量重复坐标繁琐 XML/Java 配置整合 Tomcat、MyBatis、Redis 都需要大量配置类。SpringBoot 两大核心解决所有痛点起步依赖starter统一版本管理、自动传递全套依赖无需手动匹配版本自动配置AutoConfiguration项目启动根据条件自动装配 Bean零配置开箱即用。二、第一部分起步依赖 Starter 底层原理2.1 什么是 StarterStarter 是一套整合好的依赖组合分为两类官方 starterspring-boot-starter-web、spring-boot-starter-aop、spring-boot-starter-test第三方 startermybatis-spring-boot-starter、pagehelper-spring-boot-starter、aliyun-oss-spring-boot-starter。2.2 底层依赖传递机制以spring-boot-starter-web举例仅引入 web starter 一个坐标无需手动导入 Tomcat、SpringMVC、JSON 解析包starter 内部自动传递所有配套依赖实现依赖传递SpringBoot 父工程统一管控所有组件版本不存在版本冲突无需手动指定版本号。依赖层级传递关系spring-boot-starter-web → spring-boot-starter → spring-web spring-webmvc 内嵌 Tomcat 全套包。2.3 Starter 项目结构规范标准自定义 starter 分为两个模块xxx-spring-boot-starter启动器仅做依赖管理无业务代码xxx-spring-boot-autoconfigure自动配置模块存放配置类、Bean、逻辑代码starter 模块仅 pom 引入 autoconfigure业务项目只需要引入 starter 即可拥有全部功能。三、第二部分自动配置完整底层源码拆解3.1 启动类核心注解 SpringBootApplication该注解是复合注解由三层注解组合而成SpringBootConfiguration ComponentScan EnableAutoConfiguration public interface SpringBootApplication {}SpringBootConfiguration等同于 Configuration标识当前类是配置类ComponentScan组件扫描默认扫描启动类所在包及所有子包下 Controller/Service/ComponentEnableAutoConfigurationSpringBoot 自动配置核心开关本篇重点讲解。3.2 EnableAutoConfiguration 底层流程内部封装Import(AutoConfigurationImportSelector.class)AutoConfigurationImportSelector 实现 ImportSelector 接口项目启动时读取自动配置文件SpringBoot 2.7 读取路径META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports低版本使用 spring.factories 文件存储全量自动配置类文件内预定义 Web、MyBatis、Redis、Json 等全套自动配置类WebAutoConfiguration、GsonAutoConfiguration 等所有自动配置类不会全部创建 Bean依靠Conditional系列注解条件判断满足条件才注入 IOC 容器。3.3 核心条件注解 Conditional 家族作用只有满足注解条件当前配置类 / 方法内 Bean 才会被注册到容器实现按需自动装配。注解作用场景ConditionalOnClass项目存在指定 class 字节码才创建 BeanConditionalOnMissingBean容器中不存在该 Bean 时才自动创建自定义 Bean 覆盖自动配置关键ConditionalOnProperty配置文件存在指定 key-value 才生效ConditionalOnWebApplication仅 Web 项目才装配该 Bean示例Gson 自动配置源码Configuration public class GsonAutoConfiguration { Bean ConditionalOnMissingBean // 用户自己定义Gson则不自动创建 public Gson gson(GsonBuilder builder){ return builder.create(); } }业务拓展如果不想要 SpringBoot 默认 Gson自己写 Bean Gson自动配置会失效优先使用自定义 Bean。四、自动配置四种实现方案Import 详解第三方工具类 / 自定义组件如何让 Spring 自动扫描四种导入方式优劣对比方案 1ComponentScan 扫描第三方包ComponentScan({com.example.oss}) SpringBootApplication缺点项目启动类硬编码包名多组件时臃肿企业不推荐。方案 2直接 Import (普通类 / 配置类)Import(HeaderConfig.class) SpringBootApplication适合少量配置组件多会大量堆砌 Import。方案 3Import ImportSelector 接口自动配置底层核心自定义选择器批量返回多个配置类全类名Spring 批量加载SpringBoot 原生自动配置底层就是该方案。方案 4封装 EnableXxx 注解最佳企业规范自定义注解内部封装 Import业务项目只需要添加一个注解即可开启全套功能简洁优雅。示例Import(HeaderConfig.class) public interface EnableHeader {}使用时启动类只需要写EnableHeader可读性极强所有 starter 均采用该方案。五、第三部分自定义 Starter 完整开发实战阿里云 OSS 案例5.1 业务需求封装阿里云 OSS 工具 starter业务项目引入依赖后直接 Autowired 注入 AliyunOSSOperator无需手动写配置类。5.2 双模块搭建标准结构aliyun-oss-spring-boot-starter空启动器仅 pom 依赖 autoconfigurepom 核心依赖dependencies dependency groupIdcom.itheima/groupId artifactIdaliyun-oss-spring-boot-autoconfigure/artifactId version1.0.0/version /dependency /dependenciesaliyun-oss-spring-boot-autoconfigure自动配置模块配置属性类 OssPropertiesConfigurationProperties 读取 yml 账号密钥OSS 自动配置类 OssAutoConfigurationBean 创建工具类resources/META-INF/spring 下创建 AutoConfiguration.imports 文件写入自动配置类全限定名。5.3 自动配置类完整代码Configuration EnableConfigurationProperties(OssProperties.class) ConditionalOnClass(AliyunOSSOperator.class) public class OssAutoConfiguration { Bean ConditionalOnMissingBean public AliyunOSSOperator ossOperator(OssProperties prop){ return new AliyunOSSOperator(prop.getEndpoint(),prop.getAccessKey(),prop.getSecret(),prop.getBucket()); } }5.4 使用方式业务项目 pom 引入 starter 坐标yml 填写 OSS 参数直接注入使用Autowired private AliyunOSSOperator ossOperator;无需任何配置类开箱即用和官方 MyBatis、Web starter 使用逻辑完全一致。六、下篇全文完整总结SpringBoot 两大核心起步依赖统一版本、依赖传递、自动配置条件装配 Beanstarter 分为 starter 启动模块 autoconfigure 自动配置模块是行业标准规范SpringBootApplication 三层复合注解EnableAutoConfiguration 是自动配置核心自动配置读取 META-INF 下 imports 文件配合 Conditional 按需创建 BeanConditionalOnMissingBean 允许自定义 Bean 覆盖框架自动装配对象四种 Import 导入方案EnableXxx 注解是项目最优写法自定义 starter 分两个模块配置类写入自动配置文件即可实现零侵入自动装配。下篇拓展实操练习查看 spring-boot-starter-web 的 pom 依赖传递层级自定义一个简易文件上传 starter完成自动配置在自动配置类添加 ConditionalOnProperty控制组件开关自定义 EnableXxx 注解封装第三方配置类。下篇面试高频考点什么是 starterstarter 和 autoconfigure 区别SpringBootApplication 三层注解分别作用EnableAutoConfiguration 底层实现原理ConditionalOnMissingBean 作用如何覆盖自动配置 Bean四种 Import 导入方式优劣对比自定义 starter 完整开发步骤7 SpringBoot 为什么没有版本冲突父工程统一版本管理。