Spring Boot 全面教程:从入门到实战
Spring Boot 是由 Pivotal 团队开发的一个全新框架,其设计目的是为了简化 Spring 应用的初始搭建以及开发过程,它使用了“约定优于配置”的理念,让你能快速、轻松地创建和运行生产级别的 Spring 应用。

第一部分:Spring Boot 核心概念
在学习具体操作前,理解以下几个核心概念至关重要。
什么是 Spring Boot?
想象一下,在没有 Spring Boot 之前,创建一个 Spring Web 应用需要:
- 手动配置 XML 或 Java Config 来定义 Bean。
- 手动配置数据源、事务管理器等。
- 手动集成 Web 服务器(如 Tomcat)。
而 Spring Boot 通过以下方式简化了这一切:
- 自动配置:根据你项目中引入的依赖(JAR 包),Spring Boot 会自动为你配置好大部分常见的 Bean,只要你在
pom.xml中引入了spring-boot-starter-web,Tomcat 服务器和 DispatcherServlet 就会自动配置好。 - 起步依赖:Spring Boot 提供了一系列“起步依赖”(Starters),
spring-boot-starter-web,这个依赖本身已经帮你打包好了创建 Web 应用所需的所有常用依赖(如 Spring MVC, Tomcat, Jackson 等),你无需再手动管理一个个的版本和依赖关系。 - 内嵌服务器:Spring Boot 可以将 Tomcat、Jetty 或 Undertow 服务器“内嵌”到你的应用程序中,这意味着你不需要将应用打包成 WAR 文件再部署到外部服务器,可以直接运行一个 JAR 文件来启动应用。
- 无需代码生成和 XML 配置:Spring Boot 极大地减少了样板代码,大部分配置都可以通过简单的注解和属性文件完成。
核心优势
- 快速开发:几分钟内就能搭建并运行一个 Spring 应用。
- 独立运行:可以轻松地创建一个独立的、生产级别的 Spring 应用,并以 JAR 的形式运行。
- 微服务友好:Spring Boot 与 Spring Cloud 完美结合,是构建微服务的首选框架。
- 监控方便:提供了 Actuator 组件,可以轻松监控应用的健康状况、指标等。
第二部分:环境准备
在开始编码之前,确保你的开发环境已经准备就绪。

- Java Development Kit (JDK): Spring Boot 需要 Java 8 或更高版本,推荐使用 JDK 11 或 17(LTS 版本)。
- 验证: 在终端/命令行中运行
java -version。
- 验证: 在终端/命令行中运行
- 构建工具: Maven 或 Gradle,本教程以 Maven 为例。
- 验证: 在终端/命令行中运行
mvn -v。
- 验证: 在终端/命令行中运行
- IDE: IntelliJ IDEA (社区版或专业版) 或 Eclipse,IntelliJ IDEA 对 Spring Boot 的支持非常好,强烈推荐。
- API 文档工具: Postman 或 curl,用于测试我们开发的 API。
第三部分:创建第一个 Spring Boot 项目
我们将使用最简单的方式——Spring Initializr 来创建项目。
使用 Spring Initializr (Web界面)
- 访问 https://start.spring.io/
- Project: 选择
Maven Project或Gradle Project(这里选 Maven)。 - Language:
Java - Spring Boot: 选择一个最新的稳定版本(如 3.x.x)。
- Project Metadata:
- Group:
com.example - Artifact:
demo - Name:
demo - Packaging:
Jar - Java: 选择你的 JDK 版本
- Group:
- Dependencies: 这是最关键的一步,在搜索框中输入并添加以下依赖:
Spring Web: 用于构建 Web 应用,包含 Spring MVC 和 Tomcat。Spring Boot DevTools: 提供开发时的便利功能,如自动重启。Lombok: (可选,但强烈推荐) 简化 Java 代码,自动生成 getter, setter, toString 等。
- 点击 "GENERATE" 按钮,它会下载一个
.zip文件。 - 解压下载的 ZIP 文件,并用你的 IDE 打开这个项目。
项目结构解析
打开项目后,你会看到类似下面的结构:
demo/
├── pom.xml // Maven 依赖管理文件
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java // 应用程序的启动类
│ │ └── resources/
│ │ ├── application.properties // Spring Boot 的核心配置文件
│ │ └── static/
│ │ └── templates/
│ └── test/
│ └── java/
└── ... (其他文件)
pom.xml: 定义了项目依赖,比如我们刚才选择的spring-boot-starter-web。DemoApplication.java: 这是 Spring Boot 应用的入口,你只需要运行这个类的main方法,应用就会启动。application.properties: 用于配置 Spring Boot 应用,可以修改端口号server.port=8081。
第四部分:编写你的第一个 REST API
我们来创建一个简单的 "Hello, World!" API。
创建 Controller
在 src/main/java/com/example/demo 目录下,新建一个名为 HelloController.java 的文件。

package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
// @RestController 是一个复合注解,相当于 @Controller + @ResponseBody
// 它告诉 Spring 这个类中的所有方法返回的数据都直接作为 HTTP 响应体的内容。
@RestController
public class HelloController {
// @GetMapping 注解将 HTTP GET 请求映射到该方法上。
// "/hello" 是请求的路径。
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot!";
}
}
运行并测试
- 运行应用: 在 IDE 中找到
DemoApplication.java文件,右键点击并选择 "Run 'DemoApplication.main()'"。 - 查看日志: 你会在控制台看到 Spring Boot 启动的日志,其中会显示
Tomcat started on port(s): 8080 (http)等信息,默认端口是 8080。 - 测试 API:
- 打开浏览器,访问
http://localhost:8080/hello。 - 或者使用 Postman 或 curl 命令:
curl http://localhost:8080/hello
- 你将看到响应:
Hello, Spring Boot!
- 打开浏览器,访问
恭喜!你已经成功创建了你的第一个 Spring Boot API!
第五部分:构建一个完整的 CRUD API
我们构建一个功能更完整的 API,实现对一个“用户”资源的增删改查。
创建数据模型
创建一个 User 类来表示用户实体。
// src/main/java/com/example/demo/User.java
package com.example.demo;
import lombok.Data;
@Data // Lombok 注解,自动生成 getter, setter, toString, equals, hashCode
public class User {
private Long id;
private String name;
private String email;
}
创建数据访问层
为了简化,我们不使用数据库,而是用一个内存中的 List 来存储数据。
// src/main/java/com/example/demo/UserRepository.java
package com.example.demo;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Repository // 标记这是一个数据访问层的 Bean
public class UserRepository {
private final List<User> users = new ArrayList<>();
private Long nextId = 1L;
public List<User> findAll() {
return users;
}
public Optional<User> findById(Long id) {
return users.stream().filter(u -> u.getId().equals(id)).findFirst();
}
public User save(User user) {
user.setId(nextId++);
users.add(user);
return user;
}
public void deleteById(Long id) {
users.removeIf(u -> u.getId().equals(id));
}
}
创建服务层
服务层用于封装业务逻辑。
// src/main/java/com/example/demo/UserService.java
package com.example.demo;
import org.springframework.stereotype.Service;
import java.util.List;
@Service // 标记这是一个服务层的 Bean
public class UserService {
private final UserRepository userRepository;
// 使用构造器注入依赖,这是 Spring 推荐的方式
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public List<User> getAllUsers() {
return userRepository.findAll();
}
public User getUserById(Long id) {
return userRepository.findById(id).orElse(null);
}
public User createUser(User user) {
return userRepository.save(user);
}
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
}
创建控制器
我们创建一个 UserController 来暴露这些业务操作为 REST API。
// src/main/java/com/example/demo/UserController.java
package com.example.demo;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/users") // 为这个控制器下的所有路径添加前缀
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
// GET /api/users -> 获取所有用户
@GetMapping
public List<User> getAllUsers() {
return userService.getAllUsers();
}
// GET /api/users/1 -> 根据 ID 获取单个用户
@GetMapping("/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
User user = userService.getUserById(id);
if (user != null) {
return ResponseEntity.ok(user); // 返回 200 OK 和用户数据
} else {
return ResponseEntity.notFound().build(); // 返回 404 Not Found
}
}
// POST /api/users -> 创建一个新用户
@PostMapping
public ResponseEntity<User> createUser(@RequestBody User user) {
User createdUser = userService.createUser(user);
return new ResponseEntity<>(createdUser, HttpStatus.CREATED); // 返回 201 Created
}
// DELETE /api/users/1 -> 根据 ID 删除用户
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
User user = userService.getUserById(id);
if (user != null) {
userService.deleteUser(id);
return ResponseEntity.noContent().build(); // 返回 204 No Content
} else {
return ResponseEntity.notFound().build();
}
}
}
测试 CRUD API
重新运行 DemoApplication.java,然后使用 Postman 或 curl 进行测试:
-
创建用户 (POST)
- URL:
http://localhost:8080/api/users - Method:
POST - Body (raw, JSON):
{ "name": "Alice", "email": "alice@example.com" } - 响应 (201 Created):
{ "id": 1, "name": "Alice", "email": "alice@example.com" }
- URL:
-
获取所有用户 (GET)
- URL:
http://localhost:8080/api/users - Method:
GET - 响应 (200 OK):
[ { "id": 1, "name": "Alice", "email": "alice@example.com" } ]
- URL:
-
获取单个用户 (GET)
- URL:
http://localhost:8080/api/users/1 - Method:
GET - 响应 (200 OK):
{ "id": 1, "name": "Alice", "email": "alice@example.com" }
- URL:
-
删除用户 (DELETE)
- URL:
http://localhost:8080/api/users/1 - Method:
DELETE - 响应 (204 No Content)
- URL:
第六部分:进阶主题
当你掌握了基础后,可以探索以下更高级的主题:
-
集成数据库
- JPA (Java Persistence API): 引入
spring-boot-starter-data-jpa和数据库驱动(如spring-boot-starter-data-jpa+H2 Database或MySQL Driver)。 - MyBatis: 另一个流行的持久层框架。
- Spring Data JPA: 这是 Spring 对 JPA 的封装,让你无需编写任何 SQL 代码就能完成数据库操作,只需定义一个继承
JpaRepository的接口即可。
- JPA (Java Persistence API): 引入
-
使用模板引擎
- Thymeleaf: 用于在服务器端渲染 HTML 页面,构建传统的 Web 应用。
- 引入
spring-boot-starter-thymeleaf。
-
安全控制
- Spring Security: 用于认证和授权。
- 引入
spring-boot-starter-security,可以快速实现登录、角色控制等功能。
-
配置管理
application.yml: YAML 格式的配置文件,比.properties更结构化。- 多环境配置: 创建
application-dev.properties,application-prod.properties等,通过spring.profiles.active来激活。
-
构建可执行 JAR
- 在
pom.xml中确保打包方式为jar。 - 运行
mvn clean package。 - 在
target目录下会生成一个.jar文件,可以通过java -jar demo.jar命令直接运行。
- 在
第七部分:学习资源推荐
- 官方文档: Spring Boot Reference Documentation (最权威、最全面)
- Spring Initializr: https://start.spring.io/ (项目生成器)
- Baeldung: 一个非常棒的 Spring 学习网站,有大量详细的教程。
- 官方指南: Spring Guides (官方提供的实战指南,涵盖各种场景)
Spring Boot 通过其“约定优于配置”的理念和丰富的自动配置功能,极大地简化了 Java Web 应用的开发,从创建第一个 "Hello, World" API 到构建完整的 CRUD 应用,你已经踏上了学习 Spring Boot 的正确道路,下一步,就是动手实践,并逐步探索数据库集成、安全、微服务等更高级的主题,祝你学习愉快!
