一、Spring Boot 核心认知
1. 简介
- 定位:简化 Spring 应用开发的框架,整合 Spring 技术栈,是 J2EE 开发的一站式解决方案(脚手架)。
- 核心优点:
- 快速创建独立运行的 Spring 项目,无缝集成主流框架;
- 内嵌 Servlet 容器(如 Tomcat),应用无需打成 war 包;
- Starters 机制实现自动依赖与版本控制;
- 大量自动装配,支持默认值修改,无 XML 配置、无代码生成,开箱即用;
- 提供准生产环境的运行时监控,天然适配云计算。
2. 微服务基础
- 定义:2014 年由 Martin Fowler 提出,是一种架构风格。将应用拆分为小型、独立业务功能的服务,通过 HTTP 轻量通讯,可独立部署、替换和升级。
- 与单体应用对比:单体应用是 "ALL IN ONE",微服务是 "功能拆分、独立运行"。
- 微服务优点:聚焦单一业务、小团队开发(2-5 人)、松耦合、多语言支持、易集成自动部署、便于扩展和第三方集成,可独立存储。
- 微服务缺点:操作繁琐、分布式系统复杂、问题跟踪难、服务量增加后管理成本上升。
- 参考文档:https://martinfowler.com/articles/microservices.html#MicroservicesAndSoa
3. 环境准备
- 约束条件:
- JDK:1.7 及以上(推荐 1.8,如 1.8.0_112);
- Maven:3.3 及以上(如 3.3.9);
- IDE:IntelliJ IDEA 2017+ 或 STS;
- Spring Boot:2.0.2.RELEASE(基于 Spring 5)。
- Maven 配置:在 settings.xml 的 profiles 标签中添加 JDK1.8 编译配置,指定 source、target 和 compilerVersion 为 1.8。
- IDEA 配置:指定 Maven 安装目录、用户设置文件和本地仓库路径,确保与本地 Maven 配置一致。
二、Hello World 实战
1. 项目搭建步骤
- 创建 Maven 工程(打包类型为 jar);
- 导入核心依赖:
- 父依赖:spring-boot-starter-parent(版本 1.5.9.RELEASE),统一管理依赖版本;
- web 启动器:spring-boot-starter-web(导入 web 模块所需所有依赖)。
- 编写主程序类:用 @SpringBootApplication 标注,通过 SpringApplication.run () 启动应用。
- 编写 Controller:用 @Controller 和 @RequestMapping ("/hello") 定义接口,@ResponseBody 返回字符串 "Hello World!"。
- 测试:运行主程序,浏览器访问http://localhost:8080/hello即可。如图:


- 简化部署:添加 spring-boot-maven-plugin 插件,打包为可执行 jar,通过 java -jar 命令运行。
2. 核心原理探究
(1)POM 文件
- 父项目:spring-boot-starter-parent 的父依赖是 spring-boot-dependencies,作为 Spring Boot 的版本仲裁中心,导入依赖时默认无需指定版本(未管理的依赖除外)。
- 启动器:spring-boot-starter-web是场景启动器,Spring Boot 将功能场景封装为 starters,导入对应 starter 即可自动引入该场景所需依赖。
(2)主程序类
- @SpringBootApplication:组合注解,核心包含:
- @SpringBootConfiguration:标记为 Spring Boot 配置类,本质是 @Configuration,配置类也是容器组件(@Component);
- @EnableAutoConfiguration :开启自动配置,导入 EnableAutoConfigurationImportSelector,从类路径 META-INF/spring.factories 中加载自动配置类(xxxAutoConfiguration),自动配置组件;
- @ComponentScan:扫描主配置类所在包及子包下的所有组件。
3. 快速创建项目(Spring Initializer)
- 功能:IDE 支持通过向导快速创建 Spring Boot 项目,联网选择所需模块,自动生成主程序、目录结构和配置文件。
- 默认目录:
- static:存放静态资源(js、css、images);
- templates:存放模板页面(支持 freemarker、thymeleaf,默认不支持 JSP);
- application.properties:全局配置文件,可修改默认配置。