Spring Framework常用包
目录
Spring Framework常用包
Spring狂神笔记
Spring(B站狂神说java)(自己总结方便复习)_51CTO博客_狂神说java spring
Spring狂神完整笔记_spring狂神笔记-CSDN博客
常用依赖
核心容器IOC:org.springframework:spring-context
Web MVC:org.springframework:spring-webmvc
AOP 注解支持:org.springframework:spring-aspects
JDBC 支持:org.springframework:spring-jdbc
事务管理:org.springframework:spring-tx
测试支持:org.springframework:spring-test
| 依赖 | 你列的功能 | 实际场景 | 缺了它行吗 |
|---|---|---|---|
spring-context |
核心容器 IoC | @Component、@Autowired、@Configuration、@Value |
❌ 不行,这是地基 |
spring-webmvc |
Web MVC | @Controller、@RestController、@RequestMapping |
⚠️ 不做 Web 就不用 |
spring-aspects |
AOP 注解支持 | @Aspect、@Before、@Around、@Pointcut |
⚠️ 不做切面就不用 |
spring-jdbc |
JDBC 支持 | JdbcTemplate、DataSource 配置 |
⚠️ 不用数据库就不用 |
spring-tx |
事务管理 | @Transactional、声明式事务 |
⚠️ 有数据库操作建议必加 |
spring-test |
测试支持 | @SpringBootTest、@ContextConfiguration、MockMvc |
⚠️ 写测试时才需要 |
用户请求
↓
spring-webmvc(接收请求,@Controller 处理)
↓
spring-context(管理 Service、DAO 等 Bean,@Autowired 注入)
↓
spring-aspects(可选:在 Service 层加日志、权限切面)
↓
spring-tx(@Transactional 管理数据库事务,保证一致性)
↓
spring-jdbc(JdbcTemplate 执行 SQL,操作数据库)
↓
返回响应
一个非 Spring Boot 项目的完整依赖示例
<dependencies>
<!-- 核心容器 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.31</version>
</dependency>
<!-- Web MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.31</version>
</dependency>
<!-- AOP 注解支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.3.31</version>
</dependency>
<!-- JDBC 支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.31</version>
</dependency>
<!-- 事务管理 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.31</version>
</dependency>
<!-- 测试支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.31</version>
<scope>test</scope>
</dependency>
<!-- ===== 下面这 3 个是补充 ===== -->
<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- 连接池(HikariCP 是 Spring Boot 默认) -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>4.0.3</version>
</dependency>
<!-- JSON 解析 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.5</version>
</dependency>
</dependencies>

Spring Framework 官方文档把模块分成以下几层

Spring Framework 模块架构
├── Core Container(核心容器)
│ ├── spring-core
│ ├── spring-beans
│ ├── spring-context ← 你列了
│ └── spring-expression(SpEL)
├── AOP and Instrumentation(AOP)
│ ├── spring-aop
│ └── spring-aspects ← 你列了
├── Data Access / Integration(数据访问)
│ ├── spring-jdbc ← 你列了
│ ├── spring-tx ← 你列了
│ ├── spring-orm
│ └── spring-jms
├── Web(Web 层)
│ ├── spring-web
│ └── spring-webmvc ← 你列了
└── Test(测试)
└── spring-test ← 你列了
Spring Framework 模块架构
├── Core Container
│ ├── spring-core ✅ 顺带(通过 context)
│ ├── spring-beans ✅ 顺带(通过 context)
│ ├── spring-context ✅ 你主动写了
│ └── spring-expression ✅ 顺带(通过 context)
├── AOP and Instrumentation
│ ├── spring-aop ✅ 顺带(通过 context)
│ └── spring-aspects ✅ 你主动写了
├── Data Access / Integration
│ ├── spring-jdbc ✅ 你主动写了
│ ├── spring-tx ✅ 你主动写了
│ ├── spring-orm ❌ 没导入
│ └── spring-jms ❌ 没导入
├── Web
│ ├── spring-web ✅ 顺带(通过 webmvc)
│ └── spring-webmvc ✅ 你主动写了
└── Test
└── spring-test ✅ 你主动写了
重新审视你列的 6 个依赖
| 你主动写的依赖 | 它传递了什么 | 结论 |
|---|---|---|
spring-context |
spring-core、spring-beans、spring-expression、spring-aop |
可以省略(被 webmvc 传递) |
spring-webmvc |
spring-web(里面有spring-core、spring-beans)、spring-context(上面全部) |
必须写(Web 项目入口) |
spring-aspects |
aspectjweaver(AspectJ 运行时) |
必须写(要注解式 AOP 就得加) |
spring-jdbc |
spring-core、spring-beans、spring-tx |
必须写(要 JdbcTemplate 就得加) |
spring-tx |
spring-core、spring-beans |
可以省略(被 spring-jdbc 传递) |
spring-test |
spring-core |
必须写(测试专用,scope=test) |
总结:各模块分工一览表
| 模块 | 一句话定位 | 你什么时候需要它 |
|---|---|---|
spring-core |
工具类 + 字节码操作 | 只要用 Spring 就必须有 |
spring-beans |
Bean 的定义和工厂 | 只要用 Spring 就必须有 |
spring-expression |
SpEL 动态表达式 | 需要 ${} 或 #{} 表达式时 |
spring-context |
开箱即用的 IoC 容器 | 需要 @Component/@Autowired 时 |
spring-aop |
AOP 代理生成引擎 | 需要切面增强时 |
spring-aspects |
@Aspect 注解支持 |
需要用注解写切面时 |
spring-web |
HTTP 协议抽象 + 客户端(对java web的封装,封装成Spring的格式) | 需要发 HTTP 或接收 HTTP 时 |
spring-webmvc |
MVC 框架(规范化使用,并且提供方便的注解,使得使用更加方便) | 需要写 @Controller/@RestController 时 |
spring-jdbc |
JDBC 模板 | 需要直接操作数据库(不用 ORM)时 |
spring-tx |
声明式事务 | 需要 @Transactional 时 |
spring-test |
测试上下文 + MockMvc | 需要写 Spring 单元测试时 |
spring-orm ⭐ ORM 框架整合(Hibernate/JPA)
spring-jms ⭐ JMS 消息整合
mybatis也是ORM 框架啊,为什么不用spring-orm:
- MyBatis 确实是一个 ORM 框架,但它不走 Java 的 JPA 标准规范,所以不能直接用
spring-orm来整合。 MyBatis用mybatis-spring整合(mybatis-spring是MyBatis 官方团队 提供的)
浙公网安备 33010602011771号