springboot_从入门到高级详细讲解

Spring Boot 从入门到高级详细讲解

一、Spring Boot 是什么?

1.1 Spring Boot 简介

Spring Boot 是基于 Spring Framework 的快速开发框架。

它的核心目标:

  • 简化 Spring 项目开发
  • 自动配置项目
  • 快速整合第三方组件
  • 提高开发效率
  • 开箱即用

简单理解:

Spring Boot = Spring + 自动配置 + 快速开发


二、为什么使用 Spring Boot

传统 Spring 开发:

xml 复制代码
<bean id="userService" class="com.demo.UserService" />

需要大量:

  • XML 配置
  • Bean 配置
  • Tomcat 配置
  • 数据源配置
  • Maven 配置

Spring Boot:

java 复制代码
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

即可启动项目。


三、Spring Boot 核心优点

优点 说明
自动配置 自动帮你配置 Spring 环境
内置服务器 内置 Tomcat,无需额外安装
快速开发 几分钟即可启动项目
Starter 启动器 一键整合第三方框架
微服务友好 Spring Cloud 官方支持
配置简单 application.yml 即可管理配置
社区庞大 企业级主流框架

四、Spring Boot 环境安装

4.1 安装 JDK

推荐版本:

  • JDK 17(推荐)
  • JDK 21(最新 LTS)

查看版本:

bash 复制代码
java -version

4.2 安装 Maven

查看版本:

bash 复制代码
mvn -v

Maven 用于:

  • 管理依赖
  • 打包项目
  • 自动下载 jar

4.3 创建 Spring Boot 项目

官方初始化网站:

可选择:

选项 说明
Maven 项目管理工具
Java 开发语言
Spring Boot 框架版本
Jar 打包方式

五、第一个 Spring Boot 项目

5.1 项目结构

text 复制代码
src
 ├── main
 │   ├── java
 │   └── resources
 │       ├── static
 │       ├── templates
 │       └── application.yml

5.2 启动类

java 复制代码
package com.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * SpringBoot 启动类
 */
@SpringBootApplication
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

5.3 编写 Controller

java 复制代码
package com.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 测试控制器
 */
@RestController
public class HelloController {

    /**
     * 测试接口
     */
    @GetMapping("/hello")
    public String hello() {
        return "Hello Spring Boot";
    }
}

访问:

text 复制代码
http://localhost:8080/hello

六、Spring Boot 核心注解详解

6.1 @SpringBootApplication

这是 Spring Boot 核心注解。

等价于:

java 复制代码
@Configuration
@EnableAutoConfiguration
@ComponentScan

作用:

注解 作用
@Configuration 标识配置类
@EnableAutoConfiguration 开启自动配置
@ComponentScan 自动扫描组件

6.2 @RestController

表示:

  • 当前类是控制器
  • 返回 JSON 数据
java 复制代码
@RestController
public class UserController {

}

6.3 @RequestMapping

用于接口路径映射。

java 复制代码
@RequestMapping("/user")

6.4 @GetMapping

GET 请求。

java 复制代码
@GetMapping("/list")

6.5 @PostMapping

POST 请求。

java 复制代码
@PostMapping("/save")

6.6 @Autowired

自动注入对象。

java 复制代码
@Autowired
private UserService userService;

6.7 @Service

业务层注解。

java 复制代码
@Service
public class UserService {

}

6.8 @Repository

数据层注解。

java 复制代码
@Repository
public class UserDao {

}

6.9 @Component

普通组件。

java 复制代码
@Component
public class Utils {

}

七、Spring Boot 配置文件详解

7.1 application.properties

properties 复制代码
server.port=8081

7.2 application.yml(推荐)

yaml 复制代码
server:
  port: 8081

YAML 更适合层级配置。


7.3 常用配置

修改端口

yaml 复制代码
server:
  port: 8082

修改项目路径

yaml 复制代码
server:
  servlet:
    context-path: /api

数据库配置

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

八、Spring Boot 整合 MySQL

8.1 添加依赖

xml 复制代码
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
</dependency>

8.2 配置数据库

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo
    username: root
    password: 123456

九、Spring Boot 整合 MyBatis

9.1 添加依赖

xml 复制代码
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

9.2 编写实体类

java 复制代码
package com.demo.entity;

/**
 * 用户实体类
 */
public class User {

    private Integer id;

    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

9.3 Mapper 接口

java 复制代码
package com.demo.mapper;

import com.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserMapper {

    /**
     * 查询所有用户
     */
    @Select("select * from user")
    List<User> findAll();
}

9.4 Service 层

java 复制代码
package com.demo.service;

import com.demo.entity.User;
import com.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    /**
     * 获取所有用户
     */
    public List<User> list() {
        return userMapper.findAll();
    }
}

9.5 Controller 层

java 复制代码
package com.demo.controller;

import com.demo.entity.User;
import com.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/user/list")
    public List<User> list() {
        return userService.list();
    }
}

十、Spring Boot 生命周期

10.1 Bean 生命周期

流程:

text 复制代码
实例化
↓
属性注入
↓
初始化
↓
使用
↓
销毁

十一、Spring Boot 自动配置原理

Spring Boot 最核心的机制。

11.1 自动配置原理

核心注解:

java 复制代码
@EnableAutoConfiguration

Spring Boot 启动时:

  1. 扫描依赖
  2. 判断 jar 是否存在
  3. 自动加载配置
  4. 自动创建 Bean

例如:

导入:

xml 复制代码
spring-boot-starter-web

Spring Boot 自动:

  • 配置 Tomcat
  • 配置 Spring MVC
  • 配置 DispatcherServlet

十二、Spring Boot Starter 启动器

12.1 常见 Starter

Starter 作用
spring-boot-starter-web Web 开发
spring-boot-starter-test 单元测试
spring-boot-starter-jdbc JDBC
spring-boot-starter-data-jpa JPA
spring-boot-starter-security 安全认证
spring-boot-starter-thymeleaf 模板引擎
spring-boot-starter-validation 参数校验

十三、Spring Boot 参数接收

13.1 接收普通参数

java 复制代码
@GetMapping("/test")
public String test(String name) {
    return name;
}

13.2 @RequestParam

java 复制代码
@GetMapping("/test")
public String test(@RequestParam String name) {
    return name;
}

13.3 @PathVariable

java 复制代码
@GetMapping("/user/{id}")
public Integer test(@PathVariable Integer id) {
    return id;
}

13.4 @RequestBody

接收 JSON。

java 复制代码
@PostMapping("/save")
public User save(@RequestBody User user) {
    return user;
}

十四、Spring Boot 返回 JSON

Spring Boot 默认集成 Jackson。

java 复制代码
@GetMapping("/user")
public User user() {

    User user = new User();
    user.setName("张三");

    return user;
}

自动返回:

json 复制代码
{
  "name": "张三"
}

十五、Spring Boot 统一返回结果

15.1 Result 类

java 复制代码
package com.demo.common;

/**
 * 统一返回结果
 */
public class Result<T> {

    private Integer code;

    private String message;

    private T data;

    public static <T> Result<T> success(T data) {

        Result<T> result = new Result<>();
        result.code = 200;
        result.message = "成功";
        result.data = data;

        return result;
    }
}

十六、Spring Boot 异常处理

16.1 全局异常处理

java 复制代码
package com.demo.exception;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 全局异常
     */
    @ExceptionHandler(Exception.class)
    public String error(Exception e) {

        return e.getMessage();
    }
}

十七、Spring Boot 参数校验

17.1 添加依赖

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

17.2 实体校验

java 复制代码
package com.demo.entity;

import jakarta.validation.constraints.NotBlank;

public class User {

    @NotBlank(message = "用户名不能为空")
    private String name;
}

17.3 开启校验

java 复制代码
@PostMapping("/save")
public String save(@Valid @RequestBody User user) {
    return "success";
}

十八、Spring Boot 文件上传

18.1 前端表单

html 复制代码
<form method="post" enctype="multipart/form-data">
    <input type="file" name="file">
</form>

18.2 后端上传

java 复制代码
@PostMapping("/upload")
public String upload(MultipartFile file) throws Exception {

    file.transferTo(new File("D:/" + file.getOriginalFilename()));

    return "上传成功";
}

十九、Spring Boot 拦截器

19.1 创建拦截器

java 复制代码
package com.demo.interceptor;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;

public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) {

        System.out.println("进入拦截器");

        return true;
    }
}

19.2 注册拦截器

java 复制代码
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**");
    }
}

二十、Spring Boot 过滤器 Filter

java 复制代码
@WebFilter("/*")
public class TestFilter implements Filter {

}

二十一、Spring Boot AOP 面向切面

21.1 AOP 是什么

AOP = 面向切面编程。

作用:

  • 日志
  • 权限
  • 性能监控
  • 事务

21.2 AOP 示例

java 复制代码
@Aspect
@Component
public class LogAspect {

    @Before("execution(* com.demo.service.*.*(..))")
    public void before() {
        System.out.println("方法执行前");
    }
}

二十二、Spring Boot 事务管理

22.1 开启事务

java 复制代码
@Transactional
public void save() {

}

事务作用:

  • 保证数据一致性
  • 回滚错误操作

二十三、Spring Boot 日志

23.1 默认日志

Spring Boot 默认使用:

  • SLF4J
  • Logback

23.2 日志使用

java 复制代码
private static final Logger log = LoggerFactory.getLogger(Test.class);

log.info("启动成功");

二十四、Spring Boot 热部署

24.1 DevTools

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

作用:

  • 自动重启
  • 提高开发效率

二十五、Spring Boot 打包部署

25.1 Maven 打包

bash 复制代码
mvn clean package

生成:

text 复制代码
target/demo.jar

25.2 启动 jar

bash 复制代码
java -jar demo.jar

二十六、Spring Boot 多环境配置

26.1 application-dev.yml

yaml 复制代码
server:
  port: 8081

26.2 application-prod.yml

yaml 复制代码
server:
  port: 8082

26.3 指定环境

yaml 复制代码
spring:
  profiles:
    active: dev

二十七、Spring Boot 常见目录结构

text 复制代码
com.demo
 ├── controller
 ├── service
 ├── mapper
 ├── entity
 ├── config
 ├── common
 ├── utils
 └── exception

二十八、Spring Boot + Redis

28.1 添加依赖

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

28.2 Redis 配置

yaml 复制代码
spring:
  data:
    redis:
      host: localhost
      port: 6379

二十九、Spring Boot + JWT 登录认证

29.1 JWT 是什么

JWT 是一种 Token 登录认证方式。

特点:

  • 无状态
  • 分布式友好
  • 常用于前后端分离

29.2 JWT 流程

text 复制代码
登录
↓
生成 Token
↓
返回前端
↓
前端携带 Token
↓
后端校验 Token

三十、Spring Boot + Vue 前后端分离

30.1 开发流程

text 复制代码
Vue
↓ HTTP
Spring Boot
↓
MySQL

三十一、Spring Boot + Spring Security

31.1 Spring Security

Spring 官方安全框架。

功能:

  • 登录认证
  • 权限管理
  • JWT
  • OAuth2

三十二、Spring Boot + Swagger

32.1 Swagger 作用

自动生成接口文档。


32.2 访问地址

text 复制代码
http://localhost:8080/swagger-ui/index.html

三十三、Spring Boot + Docker

33.1 Dockerfile

dockerfile 复制代码
FROM openjdk:17

COPY demo.jar app.jar

ENTRYPOINT ["java", "-jar", "/app.jar"]

三十四、Spring Boot 微服务

34.1 Spring Cloud

Spring Cloud 是微服务框架。

组件:

组件 作用
Gateway 网关
Nacos 注册中心
OpenFeign 服务调用
Sentinel 熔断限流

三十五、Spring Boot 面试高频问题

35.1 Spring Boot 和 Spring 区别

Spring Spring Boot
配置复杂 自动配置
XML 多 零配置
开发慢 快速开发

35.2 Spring Boot 自动配置原理

核心:

  • SPI
  • spring.factories
  • AutoConfiguration

35.3 @Autowired 和 @Resource 区别

注解 来源
@Autowired Spring
@Resource JDK

35.4 Spring Boot 如何解决循环依赖

三级缓存。


35.5 Bean 是单例吗

默认单例。

java 复制代码
@Scope("prototype")

可改为多例。


三十六、Spring Boot 性能优化

36.1 常见优化

优化 说明
使用连接池 提高数据库性能
Redis 缓存 减少数据库压力
异步线程池 提高吞吐量
SQL 优化 避免慢查询
JVM 调优 减少 GC

三十七、Spring Boot 常见错误

37.1 端口被占用

text 复制代码
Web server failed to start

解决:

修改端口。


37.2 数据库连接失败

text 复制代码
Communications link failure

原因:

  • MySQL 未启动
  • 用户名密码错误

三十八、Spring Boot 学习路线

初级阶段

学习:

  • Java 基础
  • Spring Boot 基础
  • MySQL
  • RESTful API

中级阶段

学习:

  • MyBatis
  • Redis
  • JWT
  • Vue
  • Linux

高级阶段

学习:

  • 微服务
  • Spring Cloud
  • Docker
  • Kubernetes
  • JVM 调优
  • 分布式

三十九、推荐学习资源

官方文档

Spring Boot 官方文档

Spring 官方文档


视频学习

B站

搜索:

  • Spring Boot
  • 黑马程序员
  • 尚硅谷

学习网站

网站 用途
https://github.com 开源项目
https://stackoverflow.com 技术问答
https://mvnrepository.com Maven 仓库
https://spring.io 官方文档

四十、企业项目开发流程

text 复制代码
需求分析
↓
数据库设计
↓
接口设计
↓
后端开发
↓
前端开发
↓
联调测试
↓
上线部署

四十一、Spring Boot 企业最佳实践

推荐规范

规范 说明
Controller 不写业务 业务放 Service
Service 不写 SQL SQL 放 Mapper
使用统一返回结构 方便前端处理
使用全局异常 避免重复 try-catch
使用日志 方便排查问题
参数校验 提高安全性

四十二、总结

Spring Boot 是目前 Java 后端开发最主流框架之一。

适用于:

  • 企业后台
  • 管理系统
  • 电商系统
  • API 服务
  • 微服务架构

掌握 Spring Boot 后,建议继续学习:

text 复制代码
Spring MVC
↓
MyBatis
↓
Redis
↓
Spring Security
↓
Spring Cloud
↓
Docker
↓
微服务架构

四十三、完整学习建议

如果你是零基础

推荐顺序:

text 复制代码
JavaSE
↓
数据库 MySQL
↓
HTML + CSS + JavaScript
↓
Spring
↓
Spring MVC
↓
Spring Boot
↓
MyBatis
↓
Redis
↓
Vue
↓
Spring Cloud

四十四、开发工具推荐

工具 用途
IntelliJ IDEA Java 开发
Navicat 数据库管理
Postman 接口测试
Apifox API 管理
Git 版本控制
Docker 容器部署

四十五、RESTful API 规范

接口规范示例

请求 接口
GET /user/list
GET /user/1
POST /user
PUT /user
DELETE /user/1

四十六、Spring Boot 常用注解总表

注解 作用
@SpringBootApplication 启动类
@RestController 返回 JSON
@Controller MVC 页面控制
@Service Service 层
@Repository Dao 层
@Autowired 自动注入
@Value 读取配置
@Configuration 配置类
@Bean 注册 Bean
@Transactional 事务
@RequestBody 接收 JSON
@PathVariable 路径参数
@RequestParam 请求参数

四十七、Spring Boot 企业项目模块

text 复制代码
用户模块
权限模块
订单模块
支付模块
文件模块
日志模块
消息模块
统计模块

四十八、未来发展方向

Java 后端方向

  • 高并发
  • 微服务
  • AI 后端
  • 云原生
  • 大数据
  • 分布式架构

四十九、最后建议

真正学会 Spring Boot 的核心:

不是背注解。

而是理解:

  • IOC
  • AOP
  • 自动配置
  • MVC
  • Bean 生命周期
  • 事务
  • 微服务架构

只有理解底层原理,才能真正成为高级 Java 后端工程师。


五十、结束语

学习 Spring Boot 最重要的是:

  • 多写项目
  • 多调试
  • 多看源码
  • 多解决 Bug

建议练习项目:

  • 博客系统
  • 用户管理系统
  • 电商后台
  • 文件管理系统
  • 在线商城
  • OA 系统

当你能独立完成完整后台项目时,Spring Boot 才算真正入门。

相关推荐
不肯过江东丶2 小时前
大聪明教你学Java | Spring AI Lab:一个让你 3 分钟接入 AI 对话能力的 Spring Boot 工具箱
spring boot·后端
腾讯云云开发2 小时前
CloudBase把一套完整的 Vibe Coding 平台开源了
后端·全栈·vibecoding
AI人工智能+电脑小能手3 小时前
【大白话说Java面试题 第77题】【Mysql篇】第7题:回表查询与全表扫描的区别?
java·开发语言·数据库·mysql·面试
lulu12165440783 小时前
Claude Code SpringBoot技能体系架构设计与演进
java·人工智能·spring boot·后端·ai编程
心之语歌3 小时前
Vert.x 高性能物联网 MQTT 网关构建指南
后端
Slice_cy3 小时前
从前端视角理解后端分层:基于 Koa 自研一个约定式 Node.js 服务框架
后端
DolphinDB3 小时前
基于 DolphinDB 搭建微服务的 SpringBoot 项目
后端·算法
callJJ3 小时前
Nacos 详解——从概念到实战
java·spring boot·spring·spring cloud·微服务·nacos
小马爱打代码3 小时前
Spring源码 第三篇:Spring 源码深度拆解:循环依赖 + 三级缓存
java·spring·缓存
罗超驿4 小时前
5.Java线程创建全攻略:5种写法 + 高频面试题解析
java·开发语言·java-ee