Java Spring 全栈教程:从入门到精通
目录
- 什么是 Spring? - 核心概念与价值
- 为什么学习 Spring? - Spring 的优势与生态
- Spring 生态系统概览 - 核心模块介绍
- 环境准备 - JDK, IDE, Maven/Gradle
- Spring 核心思想:IoC 和 DI
- 1. 控制反转
- 2. 依赖注入
- 3. 使用
@Component和@Autowired实现简单的 DI
- Spring 框架进阶
- 1. Spring 配置方式
- XML 配置 (传统方式)
- Java 配置 (推荐方式)
- 注解配置
- 2. Bean 的生命周期与作用域
- 1. Spring 配置方式
- Web 开发入门:Spring MVC
- 1. 创建第一个 Spring MVC 项目
- 2. 核心组件:
DispatcherServlet,@Controller,@RequestMapping - 3. 处理请求参数和返回 JSON 数据 (
@ResponseBody)
- 数据持久化:Spring Data JPA / MyBatis
- 1. 整合 Spring Data JPA (简化数据库操作)
- 2. 整合 MyBatis (更灵活的 SQL 控制)
- 项目实战:构建一个简单的 RESTful API
- 1. 需求分析
- 2. 项目搭建与依赖引入
- 3. 分层实现 (Entity, Repository, Service, Controller)
- 4. 测试与运行
- Spring Boot:现代化的 Spring 开发方式
- 1. 什么是 Spring Boot?
- 2. Spring Boot 的核心特性:自动配置、起步依赖
- 3. 使用 Spring Initializr 创建项目
- 4. Spring Boot 与 Spring MVC 的关系
- 学习路径与进阶方向
- 1. 基础巩固
- 2. 进阶技术
- 3. 企业级应用
- 4. 微服务架构
- 推荐资源
什么是 Spring?
Spring 是一个开源的、轻量级的 控制反转 和 面向切面编程 的容器框架,它最初由 Rod Johnson 创建,旨在解决企业级应用开发的复杂性。

Spring 就像一个大工厂或管家,你只需要告诉它你需要什么(比如数据库连接、一个服务对象),它就会帮你创建和管理好这些对象,并在你需要的时候“注入”到你的代码中。
为什么学习 Spring?
- 简化开发:通过 IoC 和 AOP,Spring 将我们从复杂的事务管理、JDBC 连接等底层代码中解放出来。
- 模块化设计:Spring 框架由多个模块组成,你可以根据自己的需求选择使用,非常灵活。
- 强大的生态:围绕 Spring 形成了一个庞大的生态系统,几乎涵盖了所有现代 Java 开发的方方面面,如 Spring MVC (Web)、Spring Data (数据库)、Spring Security (安全)、Spring Boot (快速开发) 等。
- 社区活跃,文档完善:作为 Java 领域最流行的框架,Spring 拥有全球最大的开发者社区和海量的学习资源。
- 行业标准:掌握 Spring 是成为一名合格 Java 后端开发者的必备技能。
Spring 生态系统概览
了解 Spring 的核心模块有助于你系统地学习:
| 模块 | 描述 |
|---|---|
| Spring Core | 核心容器,提供 IoC 和 DI 功能,是整个 Spring 框架的基础。 |
| Spring MVC | 用于构建 Web 应用和 RESTful API 的模块,基于 MVC 设计模式。 |
| Spring Data | 一个伞形项目,旨在简化数据库访问,它支持 JPA, MongoDB, Redis, Elasticsearch 等。 |
| Spring Security | 提供身份认证和授权功能,保护你的应用安全。 |
| Spring Boot | 不是 Spring 的替代品,而是其“超集”,它通过“约定优于配置”的理念,极大地简化了 Spring 应用的初始搭建和开发过程。 |
| Spring AOP | 面向切面编程,用于处理日志、事务、安全等横切关注点。 |
| Spring Transaction | 提供声明式和编程式的事务管理。 |
环境准备
在开始之前,确保你已经安装了:
- JDK (Java Development Kit): 推荐版本 JDK 8 或更高版本 (如 JDK 11, 17)。
- IDE (集成开发环境): IntelliJ IDEA (强烈推荐,对 Spring 支持极佳) 或 Eclipse。
- 构建工具: Maven 或 Gradle,Maven 更为传统和普遍,Gradle 在构建速度和灵活性上更优,本教程将以 Maven 为例。
Spring 核心思想:IoC 和 DI
这是 Spring 的灵魂,必须理解透彻。

1. 控制反转
传统编程:你的代码主动创建和管理依赖对象,在 UserService 中,你需要 new UserDao() 来创建数据访问对象。
public class UserService {
private UserDao userDao = new UserDao(); // 主动创建依赖
public void addUser(User user) {
userDao.save(user);
}
}
IoC 思想:创建和管理对象的权利(控制权)从你的代码转移到了 Spring 容器(IoC 容器),你不再 new 对象,而是告诉容器“我需要一个 UserDao”,容器会负责创建并“注入”给你。
2. 依赖注入
DI 是实现 IoC 的一种具体方式,即由外部(Spring 容器)来决定将哪个依赖(对象)“注入”到当前对象中。
主要有两种注入方式:
- 构造器注入 (推荐):通过构造函数注入依赖,确保对象在创建时就是完整的。
- Setter 注入:通过
set方法注入依赖。
3. 使用 @Component 和 @Autowired 实现简单的 DI
让我们通过一个简单的例子来感受一下。
步骤 1:创建 Maven 项目,引入 Spring Core 依赖
在 pom.xml 中添加:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.23</version> <!-- 使用一个稳定版本 -->
</dependency>
</dependencies>
步骤 2:创建一个普通的 Java 类(Bean)
使用 @Component 注解告诉 Spring:“我是一个需要被你管理的 Bean”。
// UserDao.java
package com.example.demo;
import org.springframework.stereotype.Component;
@Component
public class UserDao {
public void save() {
System.out.println("User data is saved to the database!");
}
}
步骤 3:创建一个需要依赖的类
// UserService.java
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class UserService {
// 1. 定义一个依赖
private final UserDao userDao;
// 2. 使用 @Autowired 进行构造器注入
// Spring 会自动找到 UserDao 类型的 Bean 并通过这个构造器注入
@Autowired
public UserService(UserDao userDao) {
this.userDao = userDao;
}
public void addUser() {
System.out.println("UserService is calling UserDao...");
userDao.save(); // 调用依赖对象的方法
}
}
步骤 4:启动 Spring 容器并测试
// MainApplication.java
package com.example.demo;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MainApplication {
public static void main(String[] args) {
// 1. 创建 Spring 容器
// AnnotationConfigApplicationContext 是一个基于注解的配置上下文
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext("com.example.demo");
// 2. 从容器中获取 Bean
UserService userService = context.getBean(UserService.class);
// 3. 使用 Bean
userService.addUser();
// 4. 关闭容器
context.close();
}
}
运行 MainApplication,你将看到控制台输出:
UserService is calling UserDao...
User data is saved to the database!
这就是最简单的 Spring 应用!你没有 new 任何对象,但 UserService 却成功使用了 UserDao,这就是 IoC 和 DI 的魔力。
Spring 框架进阶
1. Spring 配置方式
- XML 配置:早期的配置方式,通过
applicationContext.xml文件来定义 Bean 和依赖关系,现在基本不用于新项目。 - Java 配置 (推荐):使用
@Configuration和@Bean注解来在 Java 类中定义配置,这是现代 Spring 开发的标准方式。@Configuration public class AppConfig { @Bean public UserDao userDao() { return new UserDao(); } } - 注解配置:大量使用
@Component,@Service,@Repository,@Autowired等注解,让 Spring 自动扫描并管理 Bean。
2. Bean 的生命周期与作用域
- 生命周期:Bean 从创建到销毁的整个过程,包括实例化、属性填充、初始化、使用、销毁等,可以通过
@PostConstruct和@PreDestroy注解来定义初始化和销毁方法。 - 作用域:
singleton(默认):整个 Spring 容器中只有一个 Bean 实例。prototype:每次请求都会创建一个新的 Bean 实例。
Web 开发入门:Spring MVC
Spring MVC 是基于 Servlet 的一个 Web 框架,它将 Web 层的职责清晰地分离开。
1. 创建第一个 Spring MVC 项目
在 pom.xml 中添加 spring-webmvc 依赖。
2. 核心组件
DispatcherServlet:前端控制器,是整个 Spring MVC 的入口,所有请求都先经过它,再由它分发给具体的处理器。@Controller:标注一个类为控制器,用于处理用户请求。@RequestMapping:映射一个 HTTP 请求到一个处理方法上,可以类上和方法上使用。
3. 示例:返回 JSON 数据
// UserController.java
@Controller
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
@ResponseBody // 告诉 Spring MVC 直接返回方法的返回值作为响应体,而不是解析为视图名
public User getUserById(@PathVariable("id") Long id) {
// 实际项目中,这里会调用 Service 层获取数据
User user = new User();
user.setId(id);
user.setName("John Doe");
return user;
}
}
当你访问 http://localhost:8080/your-app/api/users/1 时,浏览器会直接收到 JSON 格式的数据:{"id":1,"name":"John Doe"}。
数据持久化:Spring Data JPA / MyBatis
Web 应用离不开数据库操作。
1. 整合 Spring Data JPA (简化数据库操作)
Spring Data JPA 让你无需编写 DAO/Repository 的实现类,只需定义一个接口并继承 JpaRepository,Spring 就会自动为你实现 CRUD(增删改查)方法。
步骤:
- 添加依赖:
spring-boot-starter-data-jpa,mysql-connector-java。 - 配置数据库连接信息。
- 创建实体类
@Entity。 - 创建 Repository 接口并继承
JpaRepository。public interface UserRepository extends JpaRepository<User, Long> { // 你可以在这里定义自定义查询方法,Spring 会自动实现 List<User> findByName(String name); }
2. 整合 MyBatis (更灵活的 SQL 控制)
MyBatis 允许你编写原生的 SQL 语句,对于复杂的查询或需要优化 SQL 性能的场景非常有用。
步骤:
- 添加依赖:
mybatis-spring-boot-starter,mysql-connector-java。 - 配置 MyBatis。
- 创建 Mapper 接口。
- 编写 XML 映射文件,将 SQL 与 Mapper 接口绑定。
项目实战:构建一个简单的 RESTful API
结合以上知识,我们可以构建一个完整的 CRUD 应用。
- 目标:创建一个管理用户信息的 RESTful API。
- 技术栈:Spring MVC + Spring Data JPA + MySQL。
- 实现步骤:
- 创建 Maven 项目,引入
spring-webmvc,spring-data-jpa,mysql-connector-java等依赖。 - 配置
application.properties文件,设置数据库连接。 - Entity 层:创建
User.java实体类。 - Repository 层:创建
UserRepository.java接口。 - Service 层:创建
UserService.java和UserServiceImpl.java处理业务逻辑。 - Controller 层:创建
UserController.java,提供/api/users的增删改查接口。 - 使用 Postman 或 curl 测试你的 API。
- 创建 Maven 项目,引入
这个项目会让你对 Spring 的分层架构有非常直观的理解。
Spring Boot:现代化的 Spring 开发方式
当你掌握了传统的 Spring 开发后,你会发现配置非常繁琐,Spring Boot 就是为了解决这个问题而生的。
1. 什么是 Spring Boot?
Spring Boot 不是一个新的框架,它是一个快速构建 Spring 应用的工具,它通过“起步依赖”(Starter Dependencies)和“自动配置”(Auto-configuration)来简化项目搭建。
2. Spring Boot 的核心特性
- 起步依赖:将相关的依赖打包在一起,你只需要引入一个
spring-boot-starter-web,它就会自动帮你引入 Tomcat、Spring MVC 等所有相关依赖。 - 自动配置:根据你项目中引入的依赖,Spring Boot 会自动为你配置好 Bean,你引入了
spring-boot-starter-data-jpa和 MySQL 驱动,它就会自动配置好数据源和 JPA。 - 内嵌服务器:无需部署外部 Tomcat,可以直接将应用打包成一个可执行的 JAR 文件运行。
3. 使用 Spring Initializr 创建项目
访问 start.spring.io,这是最简单的 Spring Boot 项目创建方式。
- Project: Maven Project
- Language: Java
- Spring Boot: 选择一个稳定版本 (如 2.7.x 或 3.x.x)
- Project Metadata: 填写 Group, Artifact, Name 等。
- Dependencies: 添加你需要的依赖,如
Spring Web,Spring Data JPA,MySQL Driver。 - 点击 "GENERATE" 下载项目压缩包,然后用你的 IDE 打开。
4. Spring Boot 与 Spring MVC 的关系
Spring Boot 包含了 Spring MVC,当你使用 Spring Boot 时,你实际上是在使用 Spring MVC,但所有繁琐的配置都由 Spring Boot 自动完成了,你只需要专注于编写业务代码。
学习路径与进阶方向
-
基础巩固
- 熟练掌握 IoC/DI、AOP 的核心思想。
- 理解 Spring MVC 的工作流程。
- 熟练使用 Spring Data JPA 进行数据库操作。
- 学会编写单元测试和集成测试(使用 JUnit, Mockito)。
-
进阶技术
- Spring Boot 深入:自定义 Starter、自动配置原理、Actuator 健康检查。
- Spring Security:学习如何为你的应用添加认证和授权功能。
- Spring Transaction:深入理解事务传播机制和隔离级别。
- Spring Cache:集成缓存(如 Redis, Ehcache)提升性能。
-
企业级应用
- Spring Cloud:这是构建微服务架构的完整解决方案,学习其中的核心组件,如:
- Nacos / Eureka: 服务注册与发现
- Gateway: API 网关
- OpenFeign: 声明式服务调用
- Sentinel / Hystrix: 服务熔断与限流
- Seata: 分布式事务
- Spring Cloud:这是构建微服务架构的完整解决方案,学习其中的核心组件,如:
-
微服务架构
- 将单体应用拆分为多个独立的微服务。
- 学习服务间通信(REST, gRPC)、分布式配置、链路追踪等。
推荐资源
- 官方文档:Spring Framework Reference Documentation,Spring Boot Reference Documentation。这是最权威、最准确的学习资料。
- 书籍:
- 《Spring in Action》(Spring 实战):非常经典的入门书籍,讲解深入浅出。
- 《Spring Boot in Action》(Spring Boot 实战):学习 Spring Boot 的不二之选。
- 视频教程:
- Bilibili:搜索“尚硅谷 Spring”、“黑马程序员 Spring”等,有大量免费且优质的中文视频教程。
- Udemy:国际知名的在线课程平台,有许多高质量的英文课程。
- 实践平台:
- GitHub: 阅读优秀开源项目的源码。
- 自己动手:尝试构建一些小项目,如博客系统、电商后台、在线论坛等。
也是最重要的:多写代码,多思考,多调试。 Spring 的体系虽然庞大,但核心思想是统一的,从基础开始,一步一个脚印,你一定能掌握它,祝你学习愉快!
