楼层: 首页/ 软件技术/ Spring 核心框架/ Spring 是什么:生态帝国的自我介绍
1

Spring 是什么:生态帝国的自我介绍

What Is 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 / ContextIoC 容器本体,管对象的创建和注入。6.1.x
Spring AOP动态代理做切面,日志/事务/安全的底层。6.1.x
Spring TX声明式事务,@Transactional 的真身。6.1.x
Spring Web MVC处理 HTTP 请求的那一层。6.1.x
Spring JDBC / ORMJdbcTemplate、集成 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 / EJBSpring
业务类长什么样实现一堆接口、继承 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

<project xmlns="http://maven.apache.org/POM/4.0.0"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>spring-demo</artifactId> <version>1.0.0</version> <!-- Spring 6.1.x 要求 JDK 17+ --> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- IoC 容器 + AOP 注解支持 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>6.1.14</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>6.1.14</version> </dependency> <!-- 运行时织入需要 aspectjweaver --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.22</version> </dependency> </dependencies> </project>
版本红线

Spring 6.x 全部走 jakarta 命名空间。如果你在网上抄到 javax.servlet.*、javax.persistence.* 的代码,那是 Spring 5.x 的老黄历。Spring 6 里一切都是 jakarta.servlet.*、jakarta.persistence.*。包名写错一行,启动就报 NoClassDefFoundError。

本章面试题 · 第 1 章

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。