Spring Boo从“会用”到“精通”:Spring Boot 入门
Spring Boot 入门一、是什么 —— Spring Boot 到底是什么1. 一句话定义Spring Boot 是简化 Spring 应用开发的一个框架是整个 Spring 技术栈的大整合是简化 Spring 技术栈的快速开发脚手架。它不是 Spring 的替代品而是站在 Spring 巨人的肩膀上帮你把配置地狱变成了开箱即用。2. 用大白话理解如果把 Spring 框架比作造一辆汽车传统 Spring给你发动机、变速箱、轮胎、电路……所有零件散落一地你需要自己看懂每一份装配图纸XML 配置亲手拧每一个螺丝Bean 注册稍有遗漏就抛异常。Spring Boot给你一辆已经组装好、加满油、插上钥匙就能开的整车。你想换轮胎拧下来换一个就行自定义配置。你想看油耗仪表盘已经在了Actuator 监控。核心哲学约定大于配置Convention over Configuration3. 从闲聊中提炼的核心认知正如我在学习过程中不断深化的理解Spring Boot 的本质就是基于 Spring MVC 做了一些自动化的装配。从自动装配开始到最后的 Actuator 原理解析。它的 Web 核心依然是 Spring MVC。这就意味着学 Spring Boot 不是学一个新框架而是学 Spring 的自动化配置版。你学到的请求映射、参数解析、返回值处理这些底层原理全部来自 Spring MVC。Spring Boot 只是帮你把这些东西自动装配好了。二、为什么 —— 为什么要用 Spring Boot1. 传统 Spring 开发的痛点痛点具体表现配置繁琐一个 SSM 项目需要配置 web.xml、applicationContext.xml、spring-mvc.xml 等多个 XML 文件依赖管理困难引入一个功能需要同时引入 N 个依赖版本冲突是家常便饭部署复杂需要安装 Tomcat打 war 包放到 webapps 下重复劳动每个项目都要写几乎一样的配置代码2. Spring Boot 的解决方案特性解决什么问题自动配置不用写 XML框架根据你的依赖自动配置组件起步依赖Starter引入一个spring-boot-starter-webWeb 开发所有依赖自动到位内嵌服务器不用部署到外部 Tomcat打 jar 包直接java -jar运行监控端点Actuator生产级监控开箱即用健康检查、指标收集一键搞定三、怎么做 —— Spring Boot 入门实战1. 环境准备JDK 8 或以上Maven 3.5IDEA推荐2. 创建第一个 Spring Boot 项目方式一手动改造 Maven 项目1创建普通 Maven 项目导入父项目依赖parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.6.6/versionrelativePath//parent这个父项目的父项目是spring-boot-dependencies它里面用properties标签定义了几乎所有常用依赖的版本号——这就是自动版本仲裁机制的来源。2导入 Web 场景启动器dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency/dependencies3添加打包插件plugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin4编写主启动类// 源码位置springboot2-master/boot-01-helloworld/src/main/java/com/atguigu/boot/MainApplication.javaSpringBootConfigurationEnableAutoConfigurationComponentScan(com.atguigu.boot)publicclassMainApplication{publicstaticvoidmain(String[]args){ConfigurableApplicationContextrunSpringApplication.run(MainApplication.class,args);}}关键点主启动类所在包 默认扫描根路径。所有子包下的Controller、Service、Repository、Component都会被自动扫描注册。5编写 Controller// 源码位置springboot2-master/boot-01-helloworld/src/main/java/com/atguigu/boot/controller/HelloController.javaControllerpublicclassHelloController{RequestMapping(path/hello)ResponseBodypublicStringsayhello(){returnHello;}}6启动测试运行main方法访问http://localhost:8080/hello。3. Spring Boot 核心特性详解3.1 依赖管理父项目依赖体系spring-boot-starter-parent (2.6.6) └── spring-boot-dependencies (2.6.6) └── properties 定义了所有依赖版本号修改默认版本号propertiesmysql.version5.1.43/mysql.version!-- 覆盖spring-boot-dependencies中的mysql版本 --/propertiesStarter 机制spring-boot-starter-*官方提供的场景启动器引入即拥有该场景所有依赖*-spring-boot-starter第三方提供的启动器所有 starter 最底层都依赖spring-boot-starter自动配置核心依赖3.2 自动配置初体验这是 Spring Boot 最核心的能力。先留个印象后续章节会深入源码自动配置 Tomcat引入spring-boot-starter-web时自动引入嵌入式的 Tomcat自动配置 Spring MVCDispatcherServlet、ViewResolver、MessageConverter 等全套组件自动注册自动配置 Web 常见功能字符编码过滤器、文件上传解析器等按需加载虽然加载了 100 个自动配置类但通过Conditional条件注解只有满足条件的才会生效3.3 容器功能1Configuration —— 声明配置类Configuration(proxyBeanMethodstrue)// Full 模式单例保证publicclassMyConfig{BeanpublicUseruser01(){returnnewUser();}}Full 模式proxyBeanMethods true通过 CGLIB 代理保证Bean方法返回的是容器中的单实例。配置类组件之间有依赖关系时使用。Lite 模式proxyBeanMethods false不走代理每次调用都是新对象。配置类组件之间无依赖关系时使用加速启动。2ComponentScan —— 指定包扫描路径// 等价于 SpringBootApplicationSpringBootConfigurationEnableAutoConfigurationComponentScan(com.atguigu.boot)3Import —— 导入额外组件给容器中自动创建指定类型的组件默认组件名是全类名。4Conditional —— 条件装配满足 Conditional 的某种条件时才进行组件的注入。常用条件注解注解作用ConditionalOnClass类路径下存在指定 Class 时生效ConditionalOnMissingBean容器中不存在指定 Bean 时生效ConditionalOnProperty配置文件中有指定属性且值匹配时生效ConditionalOnBean容器中存在指定 Bean 时生效3.4 配置绑定 —— ConfigurationProperties将配置文件中的值自动映射到 Java Bean 上。方式一Component ConfigurationPropertiesComponentConfigurationProperties(prefixperson)publicclassPerson{privateStringname;privateIntegerage;// getter/setter...}方式二EnableConfigurationProperties ConfigurationPropertiesConfigurationEnableConfigurationProperties(Car.class)// 开启 Car 的配置绑定并自动注册到容器publicclassMyConfig{}ConfigurationProperties(prefixmycar)publicclassCar{privateStringbrand;privatedoubleprice;}配置文件和 Java Bean 的绑定链路application.properties → ConfigurationProperties(prefixxxx) → XxxProperties Bean → 注入到自动配置类四、Spring Boot 项目的标准目录结构src/ ├── main/ │ ├── java/ # Java 源码 │ │ └── com/atguigu/boot/ │ │ ├── MainApplication.java # 主启动类放在根包 │ │ ├── controller/ # 控制器 │ │ ├── service/ # 业务层 │ │ ├── config/ # 配置类 │ │ └── bean/ # 实体类 │ └── resources/ │ ├── static/ # 静态资源js/css/images │ ├── templates/ # 模板页面Thymeleaf等 │ └── application.yml # 全局配置文件 └── test/ # 测试代码注意static和templates这两个目录名是 Spring Boot约定好的不是随便起的。后续静态资源原理章节会详细解释。五、接下来学什么有了这个入门基础接下来的学习路线就是顺着一个 HTTP 请求的生命周期把 Spring Boot底层 Spring MVC的每一个核心机制拆开来看请求到达 ↓ 【01-自动装配】启动时已经把所有组件准备好了 ↓ 【02-静态资源】如果请求的是静态资源直接返回 ↓ 【03-Rest风格】HiddenHttpMethodFilter 把 POST 转成 PUT/DELETE ↓ 【04-请求映射】DispatcherServlet → HandlerMapping 找到目标方法 ↓ 【05-参数解析】HandlerMethodArgumentResolver 遍历匹配解析参数 ↓ 【06-Model/Map】共享的 BindingAwareModelMap 数据模型 ↓ 【07/08-参数绑定】WebDataBinder Converter 完成类型转换和校验 ↓ 【09-Converter】分清三种 Converter 的作用时机 ↓ 【10-返回值处理】ReturnValueHandler 遍历匹配处理返回值 ↓ 【11-内容协商】Accept 头 → 匹配 MediaType → HttpMessageConverter 写出 ↓ 响应返回这种将散落的知识点串联成线的思考方式正是从会用走向精通的必经之路。它本质上是一个分发路由 → 策略模式匹配 → 核心逻辑执行 → 策略模式输出的闭环。