这份教程将按照学习路径进行组织,分为 入门篇、核心篇、进阶篇、实战篇和资源篇。

Spring 学习路线图
- 入门篇:了解 Spring 是什么,搭建第一个 Spring 应用。
- 核心篇:掌握 Spring 最核心的两个概念:IoC (控制反转) 和 AOP (面向切面编程)。
- 进阶篇:学习 Spring Boot,这是目前 Spring 生态的主流开发方式,并掌握数据访问、Web 开发等常用功能。
- 实战篇:通过一个完整的项目,将所学知识融会贯通。
- 资源篇:推荐优质的中文书籍、视频课程、博客和社区。
第一部分:入门篇
什么是 Spring?
- 核心思想:简化 Java 企业级应用的开发,它通过 控制反转 和 面向切面编程 两大核心技术,实现了组件之间的解耦。
- 两大核心模块:
- Spring Framework:是整个 Spring 生态的基础,提供了 IoC、AOP 等核心功能。
- Spring Boot:不是对 Spring 功能上的增强,而是提供了一种快速、便捷的方式来开发基于 Spring 的生产级应用,它通过“约定优于配置”的原则,极大地简化了项目配置和部署。
- 一个简单的比喻:想象一下你组装电脑。
- 传统方式:你需要自己去购买 CPU、主板、内存、硬盘,然后亲手将它们一根线一根线地连接起来,这很繁琐,且容易出错。
- Spring 方式:你告诉 Spring(一个装机大师)你需要一台“能玩游戏的电脑”,Spring 就会自动去选择合适的硬件(组件),并将它们完美地组装起来(依赖注入),你只需要告诉你的需求,而不关心内部细节。
搭建第一个 Spring 应用 (Hello World)
我们以最经典的 Spring Framework 为例,感受一下 IoC 的魅力。
目标:创建一个 HelloService,由 Spring 来管理它的创建和调用。
步骤:
-
创建 Maven 项目,并添加 Spring Framework 依赖。
(图片来源网络,侵删)<!-- pom.xml --> <dependencies> <!-- Spring Core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.23</version> <!-- 使用一个稳定版本 --> </dependency> </dependencies> -
创建一个简单的 Java 类 (POJO - Plain Old Java Object)。
// src/main/java/com/example/HelloService.java public class HelloService { public String sayHello(String name) { return "Hello, " + name + "!"; } } -
创建 Spring 配置文件,告诉 Spring 要管理哪个对象。
<!-- src/main/resources/applicationContext.xml --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 将 HelloService 这个类交给 Spring 容器管理 --> <!-- id是这个bean在容器中的唯一标识 --> <!-- class是bean的全限定类名 --> <bean id="helloService" class="com.example.HelloService" /> </beans> -
编写主程序,从 Spring 容器中获取对象并使用。
// src/main/java/com/example/Application.java import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Application { public static void main(String[] args) { // 1. 初始化 Spring 容器,加载配置文件 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); // 2. 从容器中获取我们之前配置的 helloService 对象 // 这里的 "helloService" 必须和配置文件中的 id 一致 HelloService service = (HelloService) context.getBean("helloService"); // 3. 调用对象的方法 String message = service.sayHello("Spring"); System.out.println(message); // 输出: Hello, Spring! } }
运行结果:Hello, Spring!

核心体验:我们没有 new HelloService(),而是由 Spring 容器 (ApplicationContext) 为我们创建和管理了这个对象,这就是 控制反转 的初步体现:对象的创建控制权,从我们手中转移到了 Spring 框架手中。
第二部分:核心篇
IoC (Inversion of Control) - 控制反转
- 概念:是一种设计思想,将对象的创建和依赖关系的管理,从应用程序代码中转移到外部容器(如 Spring 容器)。
- DI (Dependency Injection) - 依赖注入:是 IoC 的一种具体实现方式,由容器在运行期间,动态地将依赖的对象注入到组件中。
常见的依赖注入方式:
-
构造器注入:推荐使用,强制依赖,组件在创建时就是完整的。
public class UserService { private final UserRepository userRepository; // 通过构造器注入依赖 public UserService(UserRepository userRepository) { this.userRepository = userRepository; } } -
Setter 注入:可选依赖,灵活性高。
public class UserService { private UserRepository userRepository; // 通过 Setter 方法注入依赖 public void setUserRepository(UserRepository userRepository) { this.userRepository = userRepository; } }
AOP (Aspect-Oriented Programming) - 面向切面编程
- 概念:一种编程范式,它允许你将横切关注点(如日志、事务、安全、缓存等)与业务逻辑分离,这些关注点会“切”到多个业务方法中。
- 核心术语:
- 切面:横切关注点的模块化,比如一个日志切面。
- 通知:切面在特定连接点执行的动作,如
@Before(方法前执行)、@After(方法后执行)、@Around(环绕方法执行)。 - 连接点:程序执行的某个特定点,比如一个方法的调用或异常的抛出。
- 切入点:匹配连接点的表达式,AOP 通知会在切入点处执行。
示例:使用 Spring AOP 实现方法调用日志
-
添加 AOP 依赖。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.3.23</version> </dependency> -
创建一个切面类。
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Aspect // 标记这是一个切面 @Component // 让 Spring 管理这个切面 public class LoggingAspect { // @Around 环绕通知 // "execution(* com.example.service..*.*(..))" 是切入点表达式 // 表示匹配 com.example.service 包及其子包下的所有类的所有方法 @Around("execution(* com.example.service..*.*(..))") public void logAround(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("【AOP 日志】方法 " + joinPoint.getSignature().getName() + " 即将执行..."); // 执行目标方法 joinPoint.proceed(); System.out.println("【AOP 日志】方法 " + joinPoint.getSignature().getName() + " 执行完毕。"); } } -
在配置中启用 AOP (如果是 XML 配置)。
<aop:aspectj-autoproxy />
-
创建一个 Service。
@Service public class OrderService { public void createOrder() { System.out.println("正在创建订单..."); } } -
测试。
@Service public class MainApplication { public static void main(String[] args) { ApplicationContext context = ...; // 获取上下文 OrderService orderService = context.getBean(OrderService.class); orderService.createOrder(); } }
输出结果:
【AOP 日志】方法 createOrder 即将执行...
正在创建订单...
【AOP 日志】方法 createOrder 执行完毕。
第三部分:进阶篇 (Spring Boot)
Spring Boot 是现代 Spring 开发的标准,它极大地简化了配置。
创建 Spring Boot 项目
最简单的方式是使用 Spring Initializr (https://start.spring.io/)
- Project: Maven Project
- Language: Java
- Spring Boot: 选择一个稳定版本 (如 2.7.x 或 3.x.x)
- Project Metadata:
- Group:
com.example - Artifact:
demo - Name:
demo - Packaging: Jar
- Java: 8 或更高
- Group:
- Dependencies:
- Spring Web: 用于开发 Web 应用。
- Spring Data JPA: 用于数据库访问。
- MySQL Driver: 连接 MySQL 数据库。
- Lombok: 简化 Java 代码 (可选但强烈推荐)。
点击 "Generate" 下载项目,然后用 IDE (如 IntelliJ IDEA) 打开。
核心特性
- 自动配置:Spring Boot 会根据你添加的依赖,自动为你配置好相应的 Bean,你添加了
Spring Web,它会自动配置好DispatcherServlet、Tomcat服务器等。 - Starter 依赖:
spring-boot-starter-web这样的依赖,已经为你打包好了开发 Web 应用所需的所有常用库,避免了版本冲突。 - 内嵌服务器:无需部署外部的 Tomcat 或 Jetty,可以直接将应用打包成一个可执行的 JAR 文件运行。
开发一个 RESTful API
-
创建实体类。
// src/main/java/com/example/demo/entity/User.java @Entity @Data // Lombok public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; } -
创建数据访问层。
// src/main/java/com/example/demo/repository/UserRepository.java import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User, Long> { } -
创建服务层。
// src/main/java/com/example/demo/service/UserService.java import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { private final UserRepository userRepository; // 构造器注入 public UserService(UserRepository userRepository) { this.userRepository = userRepository; } public List<User> getAllUsers() { return userRepository.findAll(); } // ... 其他增删改查方法 } -
创建控制器。
// src/main/java/com/example/demo/controller/UserController.java import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/users") public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; } @GetMapping public List<User> getAllUsers() { return userService.getAllUsers(); } // ... 其他 API 端点 } -
运行
DemoApplication.java,启动应用。 -
使用 Postman 或 curl 测试。
curl http://localhost:8080/api/users
第四部分:实战篇
为了巩固知识,建议你动手做一个完整的项目,这里推荐一个经典的项目:博客系统。
项目功能:
- 用户注册、登录、注销
- 文章的增删改查
- 分类和标签管理
- 评论功能
技术栈:
- 后端: Spring Boot + Spring MVC + Spring Security + Spring Data JPA
- 数据库: MySQL 或 PostgreSQL
- 前端: Thymeleaf (服务端渲染) 或 Vue.js/React (前后端分离)
- 构建工具: Maven 或 Gradle
- 部署: Docker + 云服务器
开发步骤:
- 项目初始化:使用 Spring Initializr 创建项目。
- 数据库设计:设计用户表、文章表、分类表、标签表、评论表等。
- 实体类开发:根据数据库表创建对应的 JPA 实体类。
- 数据访问层开发:为每个实体创建
Repository接口。 - 业务逻辑层开发:实现各个功能模块的业务逻辑。
- 接口层开发:使用
@RestController开发 RESTful API。 - 安全控制:集成 Spring Security,实现用户认证和授权。
- 前端页面开发:使用 Thymeleaf 或前端框架开发用户界面。
- 测试:编写单元测试和集成测试。
- 部署上线:将项目打包成 Docker 镜像并部署到服务器。
第五部分:资源篇
官方文档 (最权威)
- Spring Framework: https://docs.spring.io/spring-framework/docs/current/reference/html/
- Spring Boot: https://docs.spring.io/spring-boot/docs/current/reference/html/
- Spring Data JPA: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/
- Spring Security: https://docs.spring.io/spring-security/reference/
优质中文书籍
- 《Spring实战(第5版)》: 经典入门书籍,讲解清晰,案例丰富。
- 《Spring Boot实战》: 专门讲解 Spring Boot 的好书。
- 《Java EE开发的颠覆者:Spring Boot实战》: 国内作者写的,非常接地气,适合国内开发者。
视频课程
- Bilibili: 搜索“Spring Boot教程”、“Spring Cloud微服务”,有很多优质的免费课程,狂神说”、“尚硅谷”等机构的课程非常受欢迎。
- 慕课网、极客时间: 也有系统性的 Spring 课程,需要付费,但质量通常很高。
博客与社区
- CSDN、掘金、思否: 大量开发者分享 Spring 学习笔记、源码分析和实战项目。
- Stack Overflow: 遇到问题时,这里是最好的解决方案来源。
- Spring 官方博客: https://spring.io/blog 了解 Spring 的最新动态和最佳实践。
代码示例
- GitHub: 搜索
spring-boot-starter、spring-boot-examples,可以找到大量优秀的开源项目供参考。
学习建议
- 动手为主,理论为辅:不要只看,一定要亲手敲代码,运行起来,修改代码,观察结果。
- 循序渐进:不要一开始就追求高深,先掌握 Spring Boot 的基本用法,再回头去理解 Spring Framework 的核心原理。
- 多看官方文档:官方文档是最准确、最全面的资料,养成查阅文档的习惯。
- 学会调试:熟练使用 IDE 的调试功能,是理解程序运行流程和排查问题的利器。
- 加入社区:遇到问题不要自己死磕,多在社区提问和交流。
希望这份详细的中文教程能帮助你顺利开启 Spring 之旅!祝你学习愉快!
