本文面向没有任何 Spring Boot 经验的新人,帮助你从环境搭建、核心概念、代码实战一路走到完整项目的发布。所有示例均基于 Spring Boot 3.x + Java 17(当前主流版本),并结合最新的官方与社区资料进行整理归纳,确保内容新颖、可直接上手。
1️⃣ 为什么选 Spring Boot?
- 约定优于配置:默认提供嵌入式 Tomcat、自动装配等,省去繁琐的 XML 配置
- 微服务友好:与 Spring Cloud、Spring Data、Spring Security 等生态无缝集成
- 社区活跃:官方文档、视频教程、开源项目层出不穷,学习资源丰富
【2024最新】Spring Boot零基础入门小白到精通,全套教程完整版通俗易懂!
12:21:20
- 最新特性:Spring Boot 3 基于 Spring Framework 6,全面支持 Java 17、Jakarta EE 9,提升性能与安全性
2️⃣ 环境准备
| 步骤 | 操作 | 说明 |
|---|---|---|
| ① 安装 JDK | 下载并安装 OpenJDK 17(或其他 JDK 17 发行版) | Spring Boot 3 只兼容 Java 17+ |
| ② 安装构建工具 | Maven(推荐)或 Gradle,两者均可在 pom.xml / build.gradle 中声明依赖 | |
| ③ IDE 推荐 | IntelliJ IDEA、VS Code(配合 Spring Initializr 插件) | |
| ④ 可选工具 | SDKMAN! 用于管理多版本 JDK、Docker 用于容器化部署 |
验证:在终端执行
java -version与mvn -v,确保均返回 17 与对应的 Maven 版本。
3️⃣ 创建第一个 Spring Boot 项目
3.1 使用 Spring Initializr(网页版)
- 打开 <https://start.spring.io >
- 参数示例:
- Project:Maven Project
- Language:Java
- Spring Boot:3.2.x(最新)
- Packaging:Jar
- Java:17
- Dependencies:Spring Web、Spring Data JPA、H2 Database(演示用)
- 点击 Generate,解压后在 IDE 中打开。
该流程官方文档也有详细说明。
3.2 手动创建(代码示例)
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication // 自动开启组件扫描、自动装配等
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
只需一个
@SpringBootApplication注解即可启动整个框架。
4️⃣ 核心概念速览
| 概念 | 作用 | 常用注解 | 示例 |
|---|---|---|---|
| 依赖注入(DI) | 自动管理对象生命周期 | @Autowired、@Inject、@Resource | @Autowired private UserService userService; |
| 控制层(Controller) | 处理 HTTP 请求 | @RestController、@GetMapping、@PostMapping | @GetMapping("/users") |
| 业务层(Service) | 业务逻辑封装 | @Service | @Service public class UserService { … } |
| 持久层(Repository) | 数据库操作 | @Repository、JpaRepository | public interface UserRepo extends JpaRepository<User, Long> {} |
| 配置文件 | 外部化属性 | application.yml / application.properties | server.port=8080 |
| 自动装配 | 根据类路径自动加载依赖 | @SpringBootApplication 包含 @EnableAutoConfiguration | 自动引入 Tomcat、Jackson 等 |
Spring Boot 通过约定的方式把这些注解组合起来,开发者只需关注业务代码。
5️⃣ 实战:Todo List 小项目
下面以 Todo List 为例,完整演示从接口到持久化再到 Docker 部署的全过程。
5.1 项目结构
src/main/java/com/example/todo
├─ controller // REST API
├─ service // 业务层
├─ repository // JPA 接口
└─ entity // 数据模型
src/main/resources
└─ application.yml
5.2 实体类(Entity)
package com.example.todo.entity;
import jakarta.persistence.*;
import lombok.Data;
@Data
@Entity
@Table(name = "todos")
public class Todo {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private Boolean completed = false;
}
使用
jakarta.persistence替代旧的javax.persistence,符合 Spring Boot 3 的 Jakarta EE 9 规范。
5.3 Repository
package com.example.todo.repository;
import com.example.todo.entity.Todo;
import org.springframework.data.jpa.repository.JpaRepository;
public interface TodoRepository extends JpaRepository<Todo, Long> { }
5.4 Service
package com.example.todo.service;
import com.example.todo.entity.Todo;
import com.example.todo.repository.TodoRepository;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class TodoService {
private final TodoRepository repo;
public TodoService(TodoRepository repo) { this.repo = repo; }
public List<Todo> findAll() { return repo.findAll(); }
public Todo save(Todo todo) { return repo.save(todo); }
public void delete(Long id) { repo.deleteById(id); }
}
5.5 Controller(REST API)
package com.example.todo.controller;
import com.example.todo.entity.Todo;
import com.example.todo.service.TodoService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/todos")
public class TodoController {
private final TodoService service;
public TodoController(TodoService service) { this.service = service; }
@GetMapping
public List<Todo> all() { return service.findAll(); }
@PostMapping
public Todo create(@RequestBody Todo todo) { return service.save(todo); }
@DeleteMapping("/{id}")
public void delete(@PathVariable Long id) { service.delete(id); }
}
5.6 配置文件(application.yml)
spring:
datasource:
url: jdbc:h2:mem:todo-db;DB_CLOSE_DELAY=-1
driver-class-name: org.h2.Driver
username: sa
password:
jpa:
hibernate:
ddl-auto: update # 自动建表
show-sql: true
server:
port: 8080
使用内存 H2 数据库,便于快速验证。
2024最新版SpringBoot零基础入门到实战(保姆级详细教程)
7:23:45
5.7 运行与测试
# 编译并启动
mvn spring-boot:run
# 或者直接打包后运行
mvn clean package
java -jar target/todo-0.0.1-SNAPSHOT.jar
使用 curl 或 Postman 访问:
curl -X POST -H "Content-Type: application/json" \
-d '{"title":"学习 Spring Boot"}' \
http://localhost:8080/api/todos
5.8 单元测试(示例)
@SpringBootTest
@AutoConfigureMockMvc
class TodoControllerTest {
@Autowired MockMvc mvc;
@Test
void shouldCreateTodo() throws Exception {
mvc.perform(post("/api/todos")
.contentType(MediaType.APPLICATION_JSON)
.content("{\"title\":\"单元测试\"}"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.id").exists());
}
}
Spring Boot 提供
@SpringBootTest与MockMvc,让控制层测试变得轻松。
6️⃣ 项目打包与 Docker 部署
6.1 打包为可执行 Jar
mvn clean package -DskipTests
# 生成 target/todo-0.0.1-SNAPSHOT.jar
6.2 Dockerfile(简洁版)
# 使用官方 OpenJDK 17 镜像
FROM eclipse-temurin:17-jdk-alpine
VOLUME /tmp
COPY target/todo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
6.3 构建与运行容器
docker build -t todo-app .
docker run -p 8080:8080 todo-app
Docker 化后,应用即可在任意平台快速部署,符合云原生最佳实践。
7️⃣ 常见问题速答
| 问题 | 解答 |
|---|---|
| Spring Boot 与 Spring Framework 的区别? | Spring Boot 是对 Spring Framework 的“约定化”封装,提供自动装配、内嵌容器等,使得 “开箱即用”。 |
| 是否必须使用 Maven? | 不是,Gradle 同样支持;选择取决于团队习惯。 |
| 如何切换到 MySQL? | 在 application.yml 中更改 datasource URL、驱动、用户名密码,并在 pom.xml 添加 mysql-connector-java 依赖。 |
Spring Boot 3 是否兼容旧的 javax.* 包? | 不兼容,已全部迁移到 jakarta.*,需要相应修改代码。 |
| 项目上线前需要做哪些优化? | 1) 关闭 show-sql;2) 使用 spring-boot-maven-plugin 进行层次化打包;3) 配置日志级别;4) 通过 Docker 多阶段构建减小镜像体积。 |
8️⃣ 小结
- 从零搭建:只需 JDK 17、Maven、IDE,使用 Spring Initializr 即可生成项目骨架。
- 核心概念:注解驱动、依赖注入、自动装配让开发更专注业务。
- 实战演练:通过 Todo List 示例掌握实体、仓库、服务、控制层的完整链路。
- 测试与部署:Spring Boot 自带测试支持,Docker 化部署一步到位,适配微服务与云原生环境。
只要按照本文的步骤动手实践,你就能在 数小时 内完成一个可运行的 Spring Boot 项目,并具备继续深入学习 Spring Cloud、Spring Security、Reactive 编程等高级主题的基础。祝你编码愉快!


被折叠的 条评论
为什么被折叠?



