Spring 概述与生态
一、Spring 是什么
Spring 是由 Rod Johnson 创建的开源 Java EE 框架,旨在解决企业级应用开发的复杂性。
核心理念:不去重新发明轮子,而是提供一种更好的方式来完成常见任务。
┌─────────────────────────────────────────────────────────┐
│ Spring Framework │
├─────────────────────────────────────────────────────────┤
│ IoC Container │ AOP │ Events │ i18n │ Testing │
├─────────────────────────────────────────────────────────┤
│ Enterprise Integration │
│ WebSocket │ Web-WS │ Web │ Webflux │ Serial │
└─────────────────────────────────────────────────────────┘二、Spring 生态全家桶
| 项目 | 作用 | 地位 |
|---|---|---|
| Spring Framework | 核心框架,IoC/AOP | 基础 |
| Spring Boot | 快速开发、自动配置 | 主流 |
| Spring MVC | Web层处理 | Web基础 |
| Spring Data | 统一数据访问 | 数据层 |
| Spring Security | 安全认证授权 | 安全 |
| Spring Cloud | 分布式微服务 | 微服务 |
| Spring Batch | 批处理 | 批处理 |
| Spring Integration | 企业集成模式 | ESB |
三、Spring Framework 模块划分
spring-core (4MB)
├── spring-core.jar # 核心工具类
├── spring-beans.jar # BeanFactory
└── spring-context.jar # ApplicationContext
AOP
├── spring-aop.jar # AOP基础
└── spring-aspects.jar # AspectJ集成
Data Access
├── spring-jdbc.jar # JDBC封装
├── spring-tx.jar # 事务管理
└── spring-orm.jar # ORM框架集成
Web
├── spring-web.jar # Servlet容器
├── spring-webmvc.jar # MVC框架
└── spring-websocket.jar # WebSocket
Integration
├── spring-jms.jar # 消息队列
└── spring-amqp.jar # RabbitMQ四、Spring 版本演进
| 版本 | 时间 | 重大特性 |
|---|---|---|
| Spring 1.x | 2004 | XML配置、IoC、AOP |
| Spring 2.x | 2006 | 自定义命名空间、JDBC增强 |
| Spring 3.x | 2009 | Java Config、REST、MVC重写 |
| Spring 4.x | 2013 | 全面支持Java 8、Boot萌芽 |
| Spring 5.x | 2017 | 响应式编程、函数式风格、Kotlin |
| Spring 6.x | 2022 | Java 17+、Jakarta EE 9、AOT |
五、为什么选择 Spring
1. 低侵入性
java
// Spring 不强制继承任何类
public class UserService {
// 只需要声明依赖,通过注入获取
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}2. 依赖注入(DI)
java
// 传统方式:自己管理依赖
UserService service = new UserService();
service.setUserDao(new UserDaoImpl());
// Spring方式:被动接收注入
@Service
public class UserService {
@Autowired
private UserDao userDao; // Spring 自动注入
}3. 面向切面编程(AOP)
java
// 事务管理、性能监控、日志记录
@Transactional
public void transfer(String from, String to, BigDecimal amount) {
// 业务逻辑
// Spring 自动管理事务
}4. 统一的抽象层
java
// 数据库访问统一抽象
@Repository
public interface UserDao extends JpaRepository<User, Long> {
List<User> findByName(String name);
}
// 缓存统一抽象
@Cacheable("users")
public User findById(Long id) {
return userRepository.findById(id).orElse(null);
}六、与其他框架对比
传统 JavaEE vs Spring
| 对比项 | 传统 EJB | Spring |
|---|---|---|
| 事务管理 | 容器管理,复杂 | 声明式,简单 |
| 依赖获取 | JNDI 查找 | DI 注入 |
| 远程访问 | RMI 复杂 | 简化封装 |
| 测试 | 需要容器 | 普通单元测试 |
Spring Boot vs Spring MVC
| 对比项 | Spring MVC | Spring Boot |
|---|---|---|
| 配置 | XML 大量配置 | 自动配置 |
| 部署 | WAR 包 | JAR 内嵌容器 |
| 开发 | 繁琐 | 快速 |
| 监控 | 手动 | Actuator |
七、Spring 项目创建
Maven 依赖
xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.1.0</version>
</dependency>传统方式创建 Bean
java
public class Main {
public static void main(String[] args) {
// 手动创建容器
ClassPathXmlApplicationContext ctx =
new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取Bean
UserService service = ctx.getBean("userService", UserService.class);
service.doSomething();
ctx.close();
}
}现代方式(推荐)
java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}八、面试高频问题
Q1: Spring 是什么?有哪些主要模块?
Spring 是一个轻量级 Java 开发框架,主要模块:
- Core: IoC/DI 容器
- AOP: 面向切面编程
- Data Access: JDBC/事务/ORM
- Web: MVC/WebSocket
- Integration: 消息/远程调用
Q2: Spring 和 Spring Boot 什么关系?
- Spring 是一个整体框架
- Spring Boot 是 Spring 的脚手架,约定优于配置
- Boot 让 Spring 开发更简单,自动配置内嵌容器
Q3: Spring 6.x 有哪些新特性?
- 最低支持 Java 17
- 迁移到 Jakarta EE 9+(jakarta.* 命名空间)
- 支持 GraalVM 原生镜像(AOT编译)
- 增强响应式编程支持
- 函数式编程增强
九、学习路线规划
第一阶段:Spring 基础(本章 + 后续3章)
↓
第二阶段:Spring Boot 快速开发
↓
第三阶段:Spring MVC Web 开发
↓
第四阶段:Spring Data 数据访问
↓
第五阶段:Spring Security 安全
↓
第六阶段:Spring Cloud 微服务
↓
第七阶段:Spring 高级(原理/源码)下一章我们将深入学习 Spring 的核心概念:IoC 与 DI(控制反转与依赖注入)