Spring Boot入门教程:60分钟快速上手
开篇:Spring Boot是什么?它有什么用?

如果你是刚刚接触Java后端开发的新手,可能听说过“Spring”和“Spring Boot”这些词。那么它们到底是什么呢?简单来说,Spring是一个非常流行的Java开发框架,它帮助开发者更快、更规范地构建企业级应用程序。而Spring Boot是在Spring的基础上进行封装的一个工具集,它的目标是让开发者能够快速创建独立运行的、生产级别的应用,而无需花费大量时间在繁琐的配置上。
举个例子来说明。想象一下你要组装一台电脑,你需要一个个选择主板、CPU、显卡、内存、硬盘等部件,并把它们都安装好才能运行。这就像使用原始的Spring框架——你得自己去配置每一块功能模块。但有了Spring Boot,就好像你直接买了一台已经装好所有组件的笔记本电脑,一开机就能直接用了,省去了很多复杂步骤,这就是它的魅力所在。
适合初学者的学习理由
对于零基础的新手来说,Spring Boot是一个非常好的起点。因为它具有以下特点:
- 简化配置:不需要写很多XML配置文件,大部分都可以自动完成。
- 内嵌服务器:项目自带服务器(比如Tomcat),部署起来更加方便。
- 快速启动:从新建项目到运行成功只需几步操作。
- 广泛社区支持:遇到问题时可以轻松找到答案或解决方案。
因此,学习Spring Boot不仅能让你快速上手编程,还能为将来深入Java后端开发打下坚实的基础。接下来我们就开始搭建环境吧!
环境准备:从零开始搭建开发环境

为了顺利开始我们的Spring Boot之旅,我们需要先准备好开发环境。以下是详细的安装步骤:
安装JDK
首先,我们需要安装Java Development Kit (JDK)。这是编写和运行Java程序的前提。你可以前往Oracle官网下载最新版本的JDK。安装完成后,可以通过命令行输入以下命令确认是否安装成功:
java -version
如果看到类似下面的输出,说明你已经成功安装了JDK:
java version "17.0.5" 2022-10-18 LTS
Java(TM) SE Runtime Environment (build 17.0.5+9-LTS-104)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.5+9-LTS-104, mixed mode, sharing)
安装IDE
接下来,我们需要一个强大的集成开发环境(IDE)来编写代码。推荐使用Eclipse或者IntelliJ IDEA,这两个都是非常好用且支持Spring Boot的IDE。以Eclipse为例,下载并解压后双击启动即可。安装插件也非常简单,打开Eclipse,在Help菜单中选择"Eclipse Marketplace",搜索“Spring Tools”,然后按照提示安装。
下载Spring Boot CLI
虽然我们主要会通过IDE来创建Spring Boot项目,但了解Spring Boot CLI也是很有帮助的。你可以访问Spring Boot官方页面,点击“Spring Boot CLI”下载对应操作系统版本。解压后将其路径添加到系统环境变量中,以便于我们在任何地方都能调用它。
使用Spring Initializr创建初始项目
最后,我们可以使用在线工具Spring Initializr来生成我们的第一个Spring Boot项目。访问spring initializr网址,选择以下选项:
- Project: Maven
- Language: Java
- Spring Boot Version: 最新稳定版
- Group: com.example
- Artifact: demo
- Name: demo
选择所需的依赖项,例如Web、Thymeleaf等,然后点击“Generate”按钮下载生成的zip文件。将zip文件解压缩,并导入你喜欢的IDE中。这样我们就完成了所有必要的准备工作,接下来就可以开始编写代码了!
核心概念解析:理解Spring Boot的关键术语

在真正动手之前,我们先来了解一些Spring Boot中最常见的核心概念。这些词汇可能会听起来有点抽象,不过别担心,我会用最简单的语言解释清楚,同时配上示例帮助你更好地理解。
1. 什么是Spring Boot Starter?
Starter 是Spring Boot中的一个重要概念。你可以把它理解为一种“预包装”的模块,里面包含了实现某些特定功能所需要的库和默认配置。举个例子,如果你想做网页相关的功能,只需要引入 spring-boot-starter-web 这个Starter,它就会帮你搞定几乎所有需要用到的东西(包括内置的Web服务器Tomcat!)。
举个小例子:
假设你想泡一杯咖啡,传统的做法是你需要去买咖啡豆、磨豆机、热水壶等等,而现在,有了Starter,你就相当于买了“一键冲泡咖啡套装”,里面一切都配好了,开箱即用。
2. 自动配置(Auto Configuration)
Spring Boot的一个神奇之处就是它可以自动配置你的项目,几乎不需要你手动改一堆设置。例如,当你加入 spring-boot-starter-web 后,Spring Boot会自动为你准备好一个Web服务器(默认是Tomcat),并且监听8080端口,你完全不用自己去写一行关于服务器的代码。这个过程叫作“自动配置”。
换句话说,自动配置就像是一个贴心助手,帮你完成了大部分后台工作,让你专注于自己的逻辑开发。
3. Bean、IoC 和 DI 是什么意思?
这三个术语听起来很高大上,但实际上它们解决的是一个很常见的问题——如何管理对象之间的关系。
- Bean 是指由Spring框架创建并管理的对象。
- IoC(Inversion of Control,控制反转) 表示Spring框架接管了原本由程序员手动管理的对象生命周期。你可以把它想象成工厂模式的一种升级,对象不再是程序员主动创建,而是交给了Spring去处理。
- DI(Dependency Injection,依赖注入) 则是用来描述对象之间如何“联系”的方式。比如,A对象需要用到B对象的功能,这时候Spring会在合适的时候把B对象“注入”到A里,而不是你自己在A里面new一个B。
举个具体例子:
假设我们有一个人类(Person)对象,它需要用到汽车(Car)对象。传统方式可能是像这样写代码:
class Person {
Car car = new Car();
}
但在Spring Boot中,你会这样写:
class Person {
@Autowired
Car car;
}
在这里,@Autowired 注解告诉Spring:“我需要一辆Car,请帮我自动注入进来。”而Car的实例化和管理是由Spring来完成的,这就是依赖注入的魅力所在!
4. 常见注解的含义
注解在Spring Boot中扮演着很重要的角色,它们用来标记行为、触发特殊的功能。下面是一些最常见的注解:
| 注解名称 | 含义 |
|---|---|
@RestController |
这是一个组合注解,结合了 @Controller 和 @ResponseBody,通常用于编写REST API服务,返回的数据可以直接给客户端(如浏览器或手机App)读取。 |
@RequestMapping |
用来定义URL映射。例如,当用户访问某个特定的网址时,这个方法会被触发执行。 |
@ComponentScan |
用于告诉Spring要扫描哪些包里的内容,找出可以作为Bean管理的对象。 |
@Service |
通常用在业务逻辑层,表示这是一个服务类。Spring会把这个类当成一个Bean来管理。 |
@Repository |
主要用在数据访问层(数据库操作),除了标注该类为Bean外,它还提供了与异常转换有关的功能。 |
@Autowired |
用来告诉Spring要自动注入一个依赖(通常是其他Bean)。 |
举个代码小例子:
我们来写一个简单的Web接口,当访问 /hello 的时候,返回一段文字 “Hello, Spring Boot!”。完整的代码如下:
@RestController
public class HelloController {
@RequestMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot!";
}
}
这段代码中:
- 我们使用了
@RestController来声明这是一个处理HTTP请求的类。 - 使用了
@RequestMapping("/hello")来定义当用户访问/hello时应该调用的方法。 - 方法的返回值就是一个字符串,Spring Boot会自动帮我们把它发送给访问者。
是不是看起来很简单?别着急,等下我们会在实战项目中详细用到这些知识。
实战项目:构建一个简单的学生管理系统

现在我们已经掌握了Spring Boot的基本知识和开发环境的搭建,接下来让我们动手做一个小项目——学生管理系统。我们会一步步实现增删改查(CRUD)功能,并让它成为一个可以运行的Web应用。
步骤1:创建项目结构
首先,在IDE(如IntelliJ IDEA或Eclipse)中打开Spring Initializr页面(https://start.spring.io/),创建一个新的Spring Boot项目,勾选以下几个Starter:
- Spring Web(用于开发Web应用)
- Spring Data JPA(用于数据库操作)
- H2 Database(轻量级内存数据库,测试用)
点击“Generate”下载项目包,然后将它导入你的IDE。
步骤2:设计数据模型
在这个项目中,我们需要一个 Student 类来表示学生信息。在项目的 src/main/java/com.example.demo.model 包下创建 Student.java 文件:
package com.example.demo.model;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private int age;
// Getter和Setter方法
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
这里的 @Entity 注解表示这是一个实体类,会和数据库表一一对应;@Id 和 @GeneratedValue 表示主键以及主键自增策略。
步骤3:创建数据访问层
接下来我们要创建一个接口来操作数据库。在 com.example.demo.repository 包下创建 StudentRepository.java:
package com.example.demo.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.example.demo.model.Student;
public interface StudentRepository extends JpaRepository<Student, Long> {
// 这里不用写任何实现代码,Spring Data JPA会自动完成常见CRUD操作
}
我们只是定义了一个继承 JpaRepository 接口的接口,Spring Boot会自动为我们实现数据库的增删改查功能。
步骤4:编写业务逻辑和服务层
为了保持代码的整洁,我们可以在 com.example.demo.service 包下创建 StudentService.java,提供对学生数据的操作方法:
package com.example.demo.service;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.demo.model.Student;
import com.example.demo.repository.StudentRepository;
@Service
public class StudentService {
@Autowired
private StudentRepository studentRepository;
public List<Student> getAllStudents() {
return studentRepository.findAll();
}
public Optional<Student> getStudentById(Long id) {
return studentRepository.findById(id);
}
public Student saveStudent(Student student) {
return studentRepository.save(student);
}
public void deleteStudent(Long id) {
studentRepository.deleteById(id);
}
}
这个类使用了 @Service 注解,表明它是一个服务类,用于处理业务逻辑。它还通过 @Autowired 自动注入了 StudentRepository,从而可以对数据库进行操作。
步骤5:创建Web接口(Controller)
为了让我们的系统可以通过HTTP协议访问,我们需要创建一个Controller来定义API接口。在 com.example.demo.controller 包下创建 StudentController.java:
package com.example.demo.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.example.demo.model.Student;
import com.example.demo.service.StudentService;
@RestController
@RequestMapping("/students")
public class StudentController {
@Autowired
private StudentService studentService;
@GetMapping
public List<Student> getAllStudents() {
return studentService.getAllStudents();
}
@GetMapping("/{id}")
public Student getStudentById(@PathVariable Long id) {
return studentService.getStudentById(id).orElse(null); // 如果找不到学生则返回null
}
@PostMapping
public Student createStudent(@RequestBody Student student) {
return studentService.saveStudent(student);
}
@PutMapping("/{id}")
public Student updateStudent(@PathVariable Long id, @RequestBody Student updatedStudent) {
updatedStudent.setId(id); // 设置ID确保更新正确
return studentService.saveStudent(updatedStudent);
}
@DeleteMapping("/{id}")
public void deleteStudent(@PathVariable Long id) {
studentService.deleteStudent(id);
}
}
这个Controller类中有五个方法,分别对应:
- 获取全部学生数据(GET /students)
- 按ID获取单个学生(GET /students/{id})
- 创建新的学生记录(POST /students)
- 更新学生记录(PUT /students/{id})
- 删除学生记录(DELETE /students/{id})
每个方法都使用了对应的HTTP动词注解(如 @GetMapping, @PostMapping 等),并通过 @RequestMapping 指定了根路径 /students。
步骤6:配置H2数据库
由于我们选择了H2 Database作为测试数据库,我们需要在 application.properties 文件中做一些基本的配置。打开 src/main/resources/application.properties,加入以下内容:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
这段配置做了以下几件事:
- 设置数据库的连接地址(使用内存型H2数据库)。
- 指定驱动类为H2。
- 允许通过用户名“sa”和空密码登录数据库。
- 开启H2的管理控制台。
现在我们已经完成了所有代码部分!接下来我们就可以运行这个项目,并测试它是否正常运作了。
步骤7:测试项目运行效果
在IDE中右键点击主类(一般名为 DemoApplication.java),选择运行。你会看到控制台打印出启动日志,提示应用正在监听8080端口。此时你可以打开浏览器访问 http://localhost:8080/h2-console,并填写JDBC URL为 jdbc:h2:mem:testdb,用户名和密码留空,进入H2的数据库管理界面。
接下来,我们可以通过浏览器或Postman这样的工具测试我们的API接口。以下是一些简单的测试操作:
获取所有学生信息:访问 http://localhost:8080/students,你应该会看到一个空的JSON数组(因为还没有录入任何数据)。
创建学生信息:使用Postman发起POST请求,向 http://localhost:8080/students 发送包含以下JSON的请求体:
{ "name": "张三", "age": 20 }发送后,你应该会得到返回的新增学生的信息。
查看刚创建的学生信息:再次访问 http://localhost:8080/students,你应该能看到刚才创建的学生记录。
更新学生信息:使用PUT请求访问 http://localhost:8080/students/1,并发送更新后的JSON数据。
删除学生信息:使用DELETE请求访问 http://localhost:8080/students/1,删除指定ID的学生记录。
就这样,我们完成了一个完整的学生管理系统,它实现了基本的CRUD功能,并能正常运行。🎉
新手常见问题解答
1. 控制台报错“Port 8080 was already in use”怎么办?
这是因为在运行Spring Boot项目时,8080端口已经被占用。你可以通过修改 application.properties 文件中的端口号来解决这个问题:
server.port=8081
保存后重启项目即可使用新端口访问你的应用。
2. 启动时报“Error creating bean with name ‘entityManagerFactory’”怎么办?
这个问题通常出现在数据库连接配置错误时。请检查你的 application.properties 中的数据库连接信息是否正确。特别是确保H2数据库的URL、驱动类和用户名密码是否匹配。
如果你使用的是其他数据库(比如MySQL或PostgreSQL),也要确保驱动类和连接信息正确无误。
3. 如何查看Spring Boot的日志信息?
Spring Boot默认会将日志打印在控制台上,便于你实时查看项目运行状态。此外,你也可以将日志输出到文件中,只需在 application.properties 中添加以下配置:
logging.file.name=logs/app.log
这样,所有的日志都会被记录在项目目录下的 logs/app.log 文件中,方便后续排查问题。
学习建议:下一步怎么走?
恭喜你完成了这个简单的Spring Boot入门教程!你现在应该已经对Spring Boot有了基本的认识,并且能够动手创建一个简单的Web应用。然而,这只是万里长征的第一步。要想真正掌握Spring Boot,你还需继续深入学习。下面是一些建议,帮助你在后续的学习中更加高效地进步。
1. 进阶学习内容推荐
- 数据库持久化:学会使用

评论 0