Appearance
Spring 概述
Spring 是 Java 企业级开发的基石。2003 年 Rod Johnson 写了一本《Expert One-on-One J2EE Design and Development》,批评当时的 EJB 过于臃肿,并给出了一个轻量级替代方案——这就是 Spring 的雏形。
一、Spring 发展史
2003 Spring Framework 诞生 → 解决 EJB 过于臃肿的问题
2004 Spring 1.0 → IoC + AOP 核心
2006 Spring 2.0 → 注解驱动、命名空间配置
2009 Spring 3.0 → JavaConfig、@Configuration
2013 Spring 4.0 → Java 8 支持、@RestController
2014 Spring Boot 1.0 → 约定优于配置,自动配置
2017 Spring 5.0 → 响应式编程(WebFlux)
2018 Spring Boot 2.0 → Java 8+ 基线、WebFlux 成熟
2022 Spring Boot 3.0 / Spring 6.0 → Jakarta EE、GraalVM 原生镜像、AOT 编译
2024 Spring Boot 3.3+ → 持续演进,CDS 支持二、Spring 生态全景
Spring 全家桶:
┌─────────────────────────────────────────────────────────────┐
│ Spring Framework(核心) │
│ IoC 容器 │ AOP │ 数据访问 │ Web │ 事务 │ 事件 │ 表达式 │
└──────────────────────┬──────────────────────────────────────┘
│
┌───────────────────┼───────────────────┐
│ │ │
▼ ▼ ▼
Spring Boot Spring Cloud Spring Data
(快速开发) (微服务治理) (数据访问层)
│ │ │
├─ 自动配置 ├─ Gateway ├─ JPA
├─ 起步依赖 ├─ OpenFeign ├─ JDBC
├─ Actuator ├─ LoadBalancer ├─ Redis
├─ 外部化配置 ├─ Config ├─ MongoDB
└─ 嵌入式容器 └─ ... └─ ...三、Spring 核心设计哲学
3.1 三大核心理念
① 轻量级
不强制依赖 Spring 的 API,POJO 即可运行在 Spring 容器中
你的业务代码不需要 import Spring 的类
② 非侵入式
Spring 不要求你的类继承它的基类或实现它的接口
一个普通的 Java 类,加了 @Component 就能被 Spring 管理
③ 模块化
Spring 由 20+ 个模块组成,按需引入
不需要 Spring MVC 就不引入 spring-webmvc3.2 两大核心思想
IoC(Inversion of Control,控制反转):
把"创建对象"的控制权从代码中交给 Spring 容器
原来:new Service() → 代码控制
现在:@Autowired Service → 容器控制
AOP(Aspect Oriented Programming,面向切面编程):
把横切关注点(日志、事务、权限)从业务代码中抽离出来
原来:每个方法里写 log.info("开始执行")
现在:一个切面搞定所有方法的日志四、Spring 解决了什么问题
没有 Spring 的时代:
public class OrderService {
private OrderDao orderDao = new OrderDaoImpl(); // 硬编码
private InventoryDao inventoryDao = new InventoryDaoImpl();
// 换一个实现需要改代码
}
有了 Spring 之后:
@Service
public class OrderService {
@Autowired
private OrderDao orderDao; // 自动注入,不关心实现
@Autowired
private InventoryDao inventoryDao;
// 换实现只需改配置,代码零修改
}| 问题 | Spring 解决方式 |
|---|---|
| 对象创建和管理 | IoC 容器统一管理 |
| 对象间依赖关系 | 依赖注入自动装配 |
| 代码耦合度高 | 面向接口编程 + DI |
| 横切关注点散落 | AOP 统一处理 |
| 样板代码多 | 模板模式(JdbcTemplate、RestTemplate) |
| 与框架强绑定 | 非侵入式设计,POJO 即可 |
五、Spring 模块架构
Spring Framework 核心模块:
spring-core → 核心工具类、类型转换、序列化
spring-beans → Bean 定义、Bean 工厂、属性编辑
spring-context → ApplicationContext、事件、国际化
spring-expression → SpEL 表达式语言
spring-aop → AOP 联盟接口、切面编程
spring-jdbc → JDBC 抽象、事务管理
spring-orm → Hibernate、JPA 集成
spring-tx → 事务抽象层
spring-web → Web 基础功能(Servlet 监听器等)
spring-webmvc → Spring MVC 框架
spring-webflux → 响应式 Web 框架
spring-test → 测试支持六、面试要点
Q1:Spring 是什么?
Spring 是一个轻量级的、非侵入式的 Java 开发框架,核心是 IoC 容器和 AOP。它提供了一站式的企业级开发解决方案,包括数据访问、事务管理、Web 开发、微服务等。
Q2:Spring 的核心思想是什么?
IoC(控制反转)和 AOP(面向切面编程)。IoC 把对象创建和管理交给容器,AOP 把横切关注点从业务代码中分离。
Q3:Spring 和 Spring Boot 的区别?
Spring 是框架,需要手动配置;Spring Boot 是 Spring 的快速开发工具,通过自动配置和起步依赖,让开发者几乎零配置启动项目。
