Spring 是什么:生态帝国的自我介绍
2003 年,Rod Johnson 嫌 EJB 太臃肿,自己写了一本《Expert One-on-One J2EE Design and Development》,书里附带了一个轻量级框架的源码——那就是 Spring 的出生证明。二十多年过去了,Spring 早已不是当年那个"轻量级容器",而是一个覆盖 Web、数据、消息、安全、云原生的完整帝国。
论Spring 的三个核心哲学
① POJO 优先:普通 Java 对象就能干活,不用去实现 EJB 那堆奇葩接口,不用继承容器规定的父类。你的业务类就是个干干净净的 Java 类,容器想怎么管怎么管,类本身不被污染。
② 控制反转(IoC):对象不主动 new 它的依赖,而是交给容器去创建和注入。你"需要什么",容器"递给你什么",这叫依赖注入(DI)。
③ 面向切面编程(AOP):日志、事务、安全这些"每个方法都要来一遍"的横切逻辑,别写进业务代码里。用切面统一拦下来,业务代码只管业务。
一句话总结:Spring = 一个大工厂(IoC 容器)+ 一个拦截器框架(AOP)+ 一堆开箱即用的模板(JdbcTemplate、TransactionTemplate 等)。
Spring 全家桶地图
很多人把 Spring、Spring Boot、Spring Cloud 搞混。它们是三层关系:Spring Framework 是地基,Spring Boot 是精装修,Spring Cloud 是整栋大楼的水电煤气。这一页先把地基讲透。
| 模块 | 大白话 | 版本基线 |
|---|---|---|
| Spring Core Beans / Context | IoC 容器本体,管对象的创建和注入。 | 6.1.x |
| Spring AOP | 动态代理做切面,日志/事务/安全的底层。 | 6.1.x |
| Spring TX | 声明式事务,@Transactional 的真身。 | 6.1.x |
| Spring Web MVC | 处理 HTTP 请求的那一层。 | 6.1.x |
| Spring JDBC / ORM | JdbcTemplate、集成 JPA/Hibernate。 | 6.1.x |
| Spring Boot | 自动配置 + 起步依赖,让你 5 分钟起一个 Web 项目。 | 3.5.x |
| Spring Cloud | 微服务治理:注册发现、配置中心、网关、熔断。 | 2025.x |
没有 Spring 的年代,Java 开发者过什么日子
理解 Spring 的价值,得先知道它消灭了什么。2000 年代写 Java EE,一个 Service 要实现 EJB 接口、继承容器规定的父类、配一堆 XML、启动慢得离谱。Spring 出来后,你只要写一个普通 Java 类,加个注解,就能干活。这就是"轻量级"三个字的分量。
| 维度 | 传统 Java EE / EJB | Spring |
|---|---|---|
| 业务类长什么样 | 实现一堆接口、继承 EJB 父类,被容器绑架。 | 普通 POJO,不继承不实现,干干净净。 |
| 对象依赖怎么管 | 代码里自己 new,硬编码。 | IoC 容器自动注入。 |
| 事务怎么开 | 手动写 UserTransaction.begin()/commit()。 | 贴个 @Transactional。 |
| 启动速度 | 分钟级,部署一次等半天。 | 秒级(Spring Boot 更快)。 |
| 测试难度 | 必须起容器才能测。 | 脱离容器也能 new 出来测。 |
环境准备:在动手之前先把锅架好
Spring Framework 6.1.x 是当前稳定版,要求 JDK 17 起步,推荐 JDK 21 LTS。包名从 javax.* 全部改成了 jakarta.*(这是 Jakarta EE 9 的硬性变化,老项目迁移时别只改版本号)。构建工具 Maven 或 Gradle 二选一,下面以 Maven 为例。
pom.xml:引入 spring-context 和 spring-aop
Spring 6.x 全部走 jakarta 命名空间。如果你在网上抄到 javax.servlet.*、javax.persistence.* 的代码,那是 Spring 5.x 的老黄历。Spring 6 里一切都是 jakarta.servlet.*、jakarta.persistence.*。包名写错一行,启动就报 NoClassDefFoundError。
1.(概念题)Spring、Spring Boot、Spring Cloud 三者是什么关系?
查看答案
答案:Spring Framework 是地基(IoC/AOP/事务);Spring Boot 是精装修(自动配置 + 起步依赖,5 分钟起项目);Spring Cloud 是水电煤气(微服务治理:注册发现、配置中心、网关、熔断)。解析:三者层层套娃,Boot 建在 Framework 上,Cloud 又建在 Boot 上。
2.(判断题)Spring 6.1 项目里,import javax.servlet.http.HttpServletRequest 能正常编译运行。对吗?
查看答案
答案:错。Spring 6 全面迁移到 Jakarta EE 9,必须写 jakarta.servlet.http.HttpServletRequest。解析:这是面试最爱考的"挖坑题"——考你有没有真在 Spring 6 上写过代码。
3.(选择题)Spring Framework 6.1.x 最低要求的 JDK 版本是?A. JDK 8 B. JDK 11 C. JDK 17
查看答案
答案:C,JDK 17。解析:Spring 6 是第一个把基线提到 17 的大版本,JDK 8/11 彻底不支持。推荐直接上 21 LTS。