Spring框架入门指南
2025/9/17大约 5 分钟
Spring框架入门指南
前置知识
在开始本教程之前,建议您具备以下基础知识:
- Java 基础语法和面向对象编程
- Maven 或 Gradle 构建工具
- 基本的设计模式概念
- 对软件架构有初步了解
Spring框架的诞生背景
在学习Spring之前,我们先来看一个典型的Java应用程序代码:
传统代码示例
// 控制器层
public class UserController {
private UserService userService = new UserServiceImpl();
public void login() {
String username = "admin";
String password = "123456";
boolean success = userService.login(username, password);
if (success) {
// 登录成功
} else {
// 登录失败
}
}
}
// 服务层
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoImplForMySQL();
public boolean login(String username, String password) {
User user = userDao.selectByUsernameAndPassword(username, password);
return user != null;
}
}
// 数据访问层
public class UserDaoImplForMySQL implements UserDao {
public User selectByUsernameAndPassword(String username, String password) {
// 连接MySQL数据库,根据用户名和密码查询用户信息
return null;
}
}
传统代码的问题
上述代码存在以下问题:
- 高耦合度:上层直接依赖下层的具体实现
- 违反开闭原则:扩展功能时需要修改现有代码
- 违反依赖倒置原则:依赖具体实现而非抽象
问题分析
当我们需要从MySQL切换到Oracle数据库时:
- 需要创建新的
UserDaoImplForOracle
类 - 必须修改
UserServiceImpl
中的代码 - 这种修改会引起连锁反应,违反了开闭原则
软件设计原则
OCP开闭原则
开闭原则(Open-Closed Principle):
- 对扩展开放:允许添加新功能
- 对修改关闭:不修改已有的稳定代码
DIP依赖倒置原则
依赖倒置原则(Dependency Inversion Principle):
- 高层模块不应该依赖低层模块,两者都应该依赖抽象
- 抽象不应该依赖细节,细节应该依赖抽象
理想的代码结构
public class UserServiceImpl implements UserService {
private UserDao userDao; // 只依赖接口,不依赖具体实现
public boolean login(String username, String password) {
User user = userDao.selectByUsernameAndPassword(username, password);
return user != null;
}
}
控制反转(IoC)
什么是IoC?
**控制反转(Inversion of Control)**是一种设计思想,其核心是:
- 将对象的创建权交出去
- 将对象关系的管理权交出去
- 由第三方容器负责创建与维护
IoC解决的问题
- 对象创建问题:谁来负责
new UserDaoImplForMySQL()
? - 依赖注入问题:谁来把创建的对象赋给
userDao
属性?
IoC的优势
- 降低耦合度:组件之间松耦合
- 提高可测试性:便于单元测试
- 增强可维护性:代码更易维护和扩展
- 支持依赖倒置:面向接口编程
依赖注入(DI)
**依赖注入(Dependency Injection)**是IoC的具体实现方式:
- Set方法注入
- 构造方法注入
- 接口注入
Spring框架简介
什么是Spring?
Spring是一个开源框架,由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
Spring为简化开发而生,让程序员只需关注核心业务的实现。
Spring的核心特性
轻量级
- 框架本身很小(约1MB)
- 处理开销微不足道
- 非侵入式设计
控制反转
- 通过IoC技术促进松耦合
- 容器主动注入依赖
- 支持多种注入方式
面向切面
- 分离业务逻辑与系统服务
- 支持声明式事务管理
- 可自定义拦截器和切点
容器特性
- 管理对象的配置和生命周期
- 支持单例和原型模式
- 维护对象间的关系
框架集成
- 可与其他框架无缝集成
- 提供丰富的企业级功能
- 支持声明式配置
Spring的8大模块

Spring框架模块详解
1. Spring Core(核心模块)
- 提供依赖注入特性
- 包含BeanFactory容器
- 是Spring应用的核心基础
2. Spring Context(上下文模块)
- 扩展BeanFactory功能
- 支持国际化、事件传播
- 提供企业级服务支持
3. Spring AOP(切面模块)
- 提供面向切面编程支持
- 支持声明式事务管理
- 可自定义拦截器和切点
4. Spring DAO(数据访问模块)
- 提供JDBC抽象层
- 统一异常处理机制
- 简化数据库操作
5. Spring ORM(对象关系映射)
- 集成主流ORM框架
- 支持Hibernate、MyBatis等
- 提供统一的事务管理
6. Spring Web MVC(Web模块)
- 功能完整的MVC框架
- 支持RESTful服务
- 与其他Web框架集成
7. Spring WebFlux(响应式Web)
- 完全非阻塞的Web框架
- 支持响应式流
- 适用于高并发场景
8. Spring Web(Web集成)
- 为Web应用提供上下文
- 支持文件上传等功能
- 与其他Web框架集成
环境要求
版本要求
本教程基于以下软件版本:
- JDK: Java 17+(Spring 6要求最低Java 17)
- IDE: IntelliJ IDEA 2022.1+
- 构建工具: Maven 3.8.6+
- Spring: 6.0.0+
- JUnit: 5.8.2+
学习路线
graph TD
A[Spring基础概念] --> B[Spring入门程序]
B --> C[IoC容器详解]
C --> D[Bean的配置与管理]
D --> E[依赖注入详解]
E --> F[注解式开发]
F --> G[AOP面向切面编程]
G --> H[Spring事务管理]
H --> I[Spring整合其他框架]
总结
本章我们学习了:
- ✅ 传统代码的问题:高耦合、违反设计原则
- ✅ 软件设计原则:OCP开闭原则、DIP依赖倒置原则
- ✅ IoC控制反转:核心思想和解决的问题
- ✅ Spring框架简介:特性、模块、优势
- ✅ 环境准备:版本要求和学习路线
通过Spring框架,我们可以实现真正的面向接口编程,让代码更加灵活、可维护和可测试。在下一章中,我们将通过实际的代码示例来体验Spring的强大功能。