Spring 概述
约 1177 字大约 4 分钟
布欧-Lewyon
2026-05-16
首页 › Java › Spring › Spring 概述
Spring 是 Java 企业级开发的事实标准。本节从它要解决什么问题出发,概览 Spring 生态的核心模块,并建立对 IoC/DI 的第一印象,为后续深入 Spring Core 和 Spring MVC 做好铺垫。
Spring 的起源
2002 年,Rod Johnson 在《Expert One-on-One J2EE Design and Development》一书中批评了当时 Java EE(当时叫 J2EE)的过度复杂:EJB 需要多个接口、部署描述符、特定容器支持,编写一个简单的"Hello World"都涉及大量样板代码。
他提出了一个更轻量的替代方案,这就是 Spring 的雏形。2003 年 Spring 框架正式开源,核心理念是:
- 简单:普通 Java 类(POJO)即可作为 Bean,无需继承框架特定类。
- 非侵入:代码不强制依赖 Spring API(除配置外)。
- 模块化:按需选组件,不必全盘接受。
Spring 生态全景
Spring 不是一个大而全的框架,而是一个模块化生态。以下是核心模块:
Spring Framework(基础)
├── Spring Core(IoC 容器) ← 管理对象的创建与组装
├── Spring AOP(面向切面) ← 日志、事务、安全等横切能力
├── Spring Web MVC ← Web 应用(REST、视图)
├── Spring Data Access ← JDBC、事务、ORM 集成
└── Spring Test ← 测试支持
Spring Boot(自动配置 + 起步依赖) ← 简化配置,快速启动
Spring Data(统一的数据访问抽象) ← JPA、JDBC、Redis、MongoDB...
Spring Security ← 认证与授权
Spring Cloud ← 微服务治理初学者路径:从 Spring Core + Spring MVC + Spring Boot 起步,这三者是最常用的组合。
IoC / DI 初体验(概念)
控制反转(IoC) 是 Spring 最核心的思想。先看一个"反例"——没有 IoC 时代码怎么写的:
public class OrderController {
// 传统方式:自己 new 依赖,硬编码具体实现
private final OrderService service = new OrderServiceImpl();
}问题:OrderController 直接依赖 OrderServiceImpl 的具体实现。如果想换成另一个实现,必须修改源码。
IoC 的思路:将对象的创建权交给容器(Spring IoC 容器),对象只需声明"我需要什么",容器负责提供。
public class OrderController {
// 声明依赖,由容器注入具体实现
private final OrderService service;
public OrderController(OrderService service) { // 构造器
this.service = service;
}
}这样 OrderController 只依赖 OrderService 接口,不关心具体实现类。更换实现时,只需修改配置,无需改业务代码。
依赖注入(DI) 是 IoC 的具体实现方式——容器在创建对象时,将它所依赖的其他对象"注入"进来(通过构造器、setter 等方式)。
这节只建立概念印象。具体如何配置、有哪些注入方式、作用域等细节,将在 Spring 核心 中展开。
Spring vs Jakarta EE
| 对比维度 | Spring | Jakarta EE |
|---|---|---|
| 核心理念 | POJO + 依赖注入 | 容器规范 + 注解驱动 |
| 上手难度 | 低(入门简单) | 中(需理解规范体系) |
| 灵活性 | 高(可替换实现) | 中(规范约束) |
| 微服务支持 | Spring Boot / Cloud | MicroProfile |
| 社区活跃度 | 极活跃 | 一般 |
两者并非互斥。Spring 底层运行在 Jakarta EE 容器(Tomcat / Jetty / Undertow)上,并使用了 Jakarta 的注解(如 @Resource、@PostConstruct)和 API(Servlet、JPA)。
Spring Boot 的作用
Spring 框架虽然比传统 Java EE 简单,但仍有大量 XML 或 Java Config 需要写。Spring Boot 在此基础上进一步简化:
- 自动配置:根据 classpath 上的依赖自动推断配置(引入
spring-boot-starter-web就自动配好 DispatcherServlet)。 - 起步依赖:将功能相关的依赖打包成一个 starter,一行依赖即可引入完整功能栈。
- 内嵌容器:无需部署 WAR,
java -jar直接运行。 - 生产就绪:Actuator 健康检查、指标、外部化配置。
正是这些能力让 Spring Boot 成为今天 Java 微服务和云原生应用的首选基础。
小结
- Spring 因简化 Java EE 开发而生,核心理念是非侵入的 POJO 编程。
- 生态模块化:Core(IoC 容器)→ AOP → MVC → Data → Boot,按需选择。
- IoC(控制反转)将对象的创建权交给容器,DI(依赖注入)是 IoC 的实现手段。
- Spring Boot 在 Spring 之上提供自动配置和起步依赖,进一步降低使用门槛。
- 易错:不要把 Spring 和 Spring Boot 混为一谈——Boot 是基于 Spring 的增强工具,不是替代品。理解 Spring Core 是学好 Boot 的前提。
- 思考任务:想一想你目前见过的项目中,有哪些地方用到了"依赖注入"的思路(不仅限于 Spring)?比如:一个方法通过参数接收配置,而不是在内部硬编码读取配置文件。
下一节:Spring 核心
