Spring框架版本新特性
本文是Spring框架历代版本的核心特性梳理,结合官方文档和权威技术资源,按版本分类呈现关键演进路径。
# 1.0(2004年3月)
官网链接:
主要特性:
- 依赖注入(DI):最先进的轻量级容器,支持
setter
和constructor
注入方式,通过BeanFactory
和ApplicationContext
实现组件松耦合配置。 - 面向切面编程(AOP):基于AOP Alliance接口的拦截框架,与核心容器深度集成,支持声明式事务管理。
- 数据访问抽象:提供通用DAO支持和数据访问异常层次结构,
JdbcTemplate
简化JDBC操作,HibernateTemplate
简化Hibernate DAO开发。 - 声明式事务:支持将声明式事务应用于任何POJO,提供JTA或本地事务策略的可插拔事务管理。
- Web MVC框架:灵活的Web MVC框架,基于策略接口构建,集成多种视图技术。
- 企业集成:JNDI支持类、应用上下文概念,提供资源加载和消息访问抽象。
# 2.0(2006年)
官网链接:
主要特性:
- XML命名空间:引入
context
和aop
命名空间,简化配置(如<context:component-scan>
)。 - Spring MVC雏形:支持
@Controller
和@RequestMapping
注解,与Struts竞争。 - AspectJ整合:支持
@Aspect
注解,增强AOP灵活性。 - JPA抽象层:整合Java Persistence API,简化ORM开发。
- 异步JMS支持:支持消息驱动的POJO处理。
# 2.5(2007年11月)
官网链接:
主要特性:
- 组件扫描和自动配置:支持自动检测类路径中的应用组件并将其自动配置为Spring管理对象,引入
@Component
、@Repository
、@Service
等注解。 - 注解驱动配置:引入
@Autowired
、@Resource
和@Qualifier
等注解,大幅减少XML配置依赖。 - Spring MVC注解支持:新的注解驱动控制器模型,支持Servlet和Portlet环境,提供更灵活的Web开发方式。
- Spring TestContext框架:全新的集成测试框架,提供对JUnit 4和TestNG的一流支持。
- AspectJ增强:新增bean名称切点元素,内置支持基于
LoadTimeWeaver
抽象的AspectJ加载时编织。 - XML配置命名空间:新增
context
和jms
命名空间,提供最大便利性。 - JDBC改进:扩展
SimpleJdbcTemplate
功能,包括对命名SQL参数的支持。 - JCA支持:能够将Spring ApplicationContext部署为JCA RAR文件,支持无头应用模块。
# 3.0(2009年12月)
官网链接:
主要特性:
- Java 5+支持:基于Java 5构建,全面支持Java 6,兼容J2EE 1.4和Java EE 5,并提供Java EE 6的早期支持。
- Spring Expression Language(SpEL):全新的表达式语言,支持动态表达式计算(如
#{bean.property * 2}
)。 - Java配置增强:引入
@Configuration
和@Bean
注解,推动代码优先配置,减少XML依赖。 - 类型转换系统:新的类型转换系统和字段格式化系统,增强数据绑定能力。
- 全面REST支持:
RestTemplate
提供HTTP客户端API,新增REST相关注解,支持服务端和客户端REST功能。 - Spring MVC增强:新增
@PathVariable
和@RequestParam
等注解,增强MVC配置能力。 - 声明式模型验证:整合JSR-303 Bean Validation规范,增强数据校验能力。
- 嵌入式数据库:支持HSQL、H2、Derby等内存数据库,简化测试环境搭建。
- 对象到XML映射:提供对象到XML的映射功能。
- 异步方法调用:支持异步方法调用能力。
# 3.1
官网链接:
主要特性:
- Profile机制:
@Profile
注解支持多环境配置(如开发、测试、生产)。 - Servlet 3支持:基于代码的Servlet容器配置,无需web.xml。
- 环境抽象(Environment):统一管理属性源和配置文件。
- Hibernate 4整合:适配Hibernate 4的新特性。
# 3.2(2012年12月)
官网链接:
主要特性:
- Servlet 3异步支持:方法可返回
Callable
、DeferredResult
或AsyncTask
进行异步请求处理,支持Servlet 3的AsyncContext
。 - Spring MVC测试框架:提供"一流的Spring MVC应用测试支持",使用流畅API无需Servlet容器即可测试。
- 内容协商改进:引入
ContentNegotiationStrategy
和ContentNegotiationManager
,提供更灵活的媒体类型解析。 - 新注解和功能:
@ControllerAdvice
用于跨控制器异常处理@MatrixVariable
用于提取矩阵变量@RequestBody
改进,支持验证
- 其他改进:
- Jackson JSON 2库支持
- Tiles 3支持
- HTTP PATCH方法支持
- 初步JCache 0.5支持
- 改进的日期/时间格式化
- 增强的测试功能
- 并发优化
- 基于Gradle的构建系统
- 精细化Java 7支持
# 4.0(2013年12月)
官网链接:
主要特性:
- Java 8全面支持:首个全面支持Java 8特性的版本,整合Lambda表达式、Stream API和默认方法。
- Java SE 6最低要求:最低要求提升至Java SE 6,移除对旧版本Java的支持。
- Groovy Bean配置:支持使用Groovy DSL定义外部Bean配置,提供更灵活的配置方式。
- WebSocket支持:新增
spring-websocket
模块,提供基于WebSocket的双向通信全面支持。 - @RestController注解:新增
@RestController
注解,简化RESTful Web服务开发。 - AsyncRestTemplate:提供非阻塞异步支持的
AsyncRestTemplate
类。 - 时区支持:框架范围内的托管时区支持,如在
LocaleContext
中。 - 改进的启动体验:增强新用户的入门和初始设置体验。
- 核心容器改进:增强依赖注入和配置能力。
- 测试改进:增强测试框架和能力。
# 4.1
官网链接:
主要特性:
- Spring Messaging模块:新增
@MessageMapping
和@SendTo
注解,支持WebSocket消息驱动开发。 - JCache(JSR-107)集成:通过
@Cacheable
、@CacheEvict
等注解实现统一的缓存抽象,支持Ehcache 2.5+、Hazelcast等。 - WebSocket增强: 引入
WebSocketHandler
和SockJSClient
,支持跨浏览器的WebSocket通信。提供WebSocketScope
和SockJS
客户端统计功能。 - 静态资源处理优化:新增
ResourceResolver
和ResourceTransformer
,支持路径匹配和资源预处理(如版本号替换)。整合Groovy模板引擎(如GroovyMarkupView
)。 - Java 8支持:引入
java.util.Optional
类型,支持在@RequestParam
和依赖注入中处理可为空的参数。增强SpEL编译器模式,提升表达式执行性能。 - 测试改进:
@Sql
注解支持动态脚本参数和事务隔离级别配置。MockMvc
新增MockMvcConfigurer
全局配置,简化测试用例。
# 4.2(2015年7月)
官网链接:
主要特性:
- 基于注解的事件:应用事件基础设施现在提供基于注解的模型,引入
@EventListener
注解,支持通过SpEL过滤事件(如@EventListener(condition = "#event.payload > 10")
)。@TransactionalEventListener
支持在事务提交后触发事件。 - @AliasFor注解:Spring Framework 4.2引入对声明和查找注解属性别名的一流支持。
- HtmlUnit支持:Spring MVC测试框架现在为HtmlUnit提供一流支持。
- Hibernate 5.0支持:全面支持Hibernate ORM 5.0,作为JPA提供者(自动适配)以及通过其原生API。
- CORS支持:内置CORS支持,包括全局(MVC Java配置和XML命名空间)和控制器级别配置。
- HTTP流和服务器发送事件:HTTP流和服务器发送事件(Server-Sent Events)支持。
- JMS改进:
autoStartup
属性可通过JmsListenerContainerFactory
控制,@JmsListener
现在是可重复注解。 - Java 8默认方法支持:
@Bean
注解可标注在接口的默认方法上,实现轻量级配置扩展。 - 配置灵活性提升:
@Import
支持导入普通类(非@Configuration
类),通过ImportBeanDefinitionRegistrar
动态注册Bean。
# 4.3(2016年6月)
官网链接:
主要特性:
- 测试改进:
- 新增
SpringRunner
作为SpringJUnit4ClassRunner
的别名 - 测试相关注解现在可以在接口上声明
@Transactional
测试方法不再要求必须是public- Spring TestContext框架中的ApplicationContext缓存现在有界,默认最大容量为32
- 新增
- 核心容器改进:构造函数注入的隐式化(当只有一个构造函数时无需
@Autowired
注解) - 组合注解:如
@GetMapping
、@PostMapping
等,简化RESTful Web服务开发 - 库更新:
- Hibernate ORM 5.2(仍支持4.2/4.3和5.0/5.1,3.6现已弃用)
- 嵌入更新的ASM 5.1、CGLIB 3.2.4和Objenesis 2.4
- JUnit要求:Spring TestContext框架中的JUnit支持现在要求JUnit 4.12或更高版本
- @Nullable注解:增强代码健壮性,减少空指针异常(部分功能)
- 生命周期结束:4.3.x于2020年12月31日达到官方EOL(生命周期结束),不再接收更新或安全补丁
# 5.0(2017年9月)
官网链接:
主要特性:
- 基线要求更新:要求JDK 8和Java EE 7+ API,完全兼容JDK 9,移除对Portlet、Velocity、JasperReports等旧技术的支持。
- 响应式编程(Spring WebFlux):引入全新的响应式Web框架Spring WebFlux,支持非阻塞I/O和背压机制。
- 核心改进:增强JDK 8+支持,包括lambda和泛型,新的Commons Logging桥接器(
spring-jcl
),空安全API声明。 - Web创新:新增
WebClient
进行非阻塞HTTP调用,增强Kotlin支持,改进CORS配置。 - 函数式编程:
RouterFunction
和HandlerFunction
提供函数式Web编程模型。 - 测试增强:完全支持JUnit 5,新的测试执行回调,并行测试执行支持。
- 关键移除:移除已弃用的包和方法,更新最低库版本(如Hibernate 5、Jackson 2.9+)。
# 5.1(2018年10月)
官网链接:
主要特性:
- JDK 11 LTS支持:全面兼容JDK 11,在类路径和模块路径上提供无警告体验,性能和兼容性改进。
- 核心容器增强:支持
@Profile
条件中的逻辑表达式,优化Kotlin beans DSL,改进bean检索和注入机制。 - Web框架改进:控制器参数注解现在在接口上检测,更严格的URI变量编码,改进日志以提供更人性化的输出,支持Brotli压缩以及GZip。
- WebFlux进展:通过Reactor Netty 0.8提供HTTP/2服务器支持,增强日志和会话安全,路由器函数的DSL改进,Protobuf支持等第三方集成。
- 其他更新:Hibernate ORM 5.3集成,响应式消息支持,增强测试能力,改进性能和减少启动开销。
- Kotlin 1.3支持:优化Kotlin开发体验,增强DSL功能,预览Coroutines支持。
- Servlet 4.0支持:适配Servlet 4.0规范,提升Web模块性能。
# 5.2(2019年9月)
官网链接:
主要特性:
- 核心改进:升级到ASM 7.1和Kotlin 1.3,新的
MergedAnnotations
API用于高效注解检索,增强@Configuration
模型带有proxyBeanMethods
属性。 - Web增强:新的"WebMvc.fn"函数式编程模型,改进WebFlux支持(包括Kotlin Coroutines),RSocket消息支持,请求映射性能优化。
- 事务管理:支持响应式事务管理,通过Vavr
Try
返回类型进行事务控制。 - 测试改进:JUnit Jupiter 5.5.2支持,新的
@TestConstructor
注解,支持测试执行事件。 - Kotlin Coroutines集成:优化异步代码可读性,适配Kotlin协程,提供更自然的异步编程体验。
- RSocket支持:提供Reactive Streams通信协议,增强微服务间交互能力。
- 文档改进:代码示例现在提供Java和Kotlin两个版本。
- 升级注意事项:要求Jackson 2.9.7+,注解检索算法修订,CORS处理显著更新,弃用某些媒体类型和路径扩展匹配。
# 5.3(2020年10月)
官网链接:
主要特性:
- 核心改进:升级到Kotlin 1.4和ASM 9.0,增强GraalVM原生支持,改进对Java 14/15记录类的支持,通过
spring.spel.ignore
选项移除SpEL支持。 - 数据访问增强:新的
spring-r2dbc
支持模块,新的JdbcTransactionManager
,支持JdbcTemplate
上的queryForStream
,改进Hibernate和事务管理。 - Web开发:使用
PathPattern
提供更高效的URL匹配,CORS配置使用allowedOriginPatterns
,改进@ControllerAdvice
中的异常处理,WebFlux改进如新的DefaultPartHttpMessageReader
。 - 测试:更好的JUnit Jupiter
@Nested
测试类支持,改进的WebTestClient
能力,增强测试中的事务管理。 - 消息和WebSocket:改进RSocket支持,更好的STOMP/WebSocket顺序保持,Kotlin多平台序列化支持。
- JDK 15支持:整合密封类、模式匹配和Text Blocks等新特性。
- MockMvc增强:统一HTTP测试API,支持Kotlin DSL。
- 响应式改进:WebFlux支持多部分请求的完全响应式处理。
- 关键弃用:RxJava 1.x支持,某些远程技术,基于属性的bean定义格式。
# 6.0(2022年11月)
官网链接:
主要特性:
- 基线升级:要求Java 17+和Jakarta EE 9+,从
javax
命名空间迁移到jakarta
,兼容最新Web服务器如Tomcat 10.1和Jetty 11。 - 核心改进:全面支持GraalVM原生镜像,提前(AOT)转换支持,简化bean属性确定,增强对虚拟线程的支持。
- Web和API增强:新的HTTP接口客户端带有
@HttpExchange
,支持RFC 7807问题详情,统一HTTP状态码处理,RSocket接口客户端,通过Micrometer进行可观察性检测。 - 移除/弃用功能:移除RPC风格的远程调用,移除过时的Servlet集成,弃用
ListenableFuture
,更改尾部斜杠匹配行为。 - 测试和兼容性:支持测试AOT处理的应用上下文,基于Servlet API 6.0更新Servlet模拟,增强与HtmlUnit的集成。
- 响应式改进:WebFlux支持多部分表单的流式处理(
PartEvent
API)。 - 可观察性主题:整合Micrometer,支持RFC 7807 Problem Details,提供全面的应用监控能力。
# 6.1(2023年11月)
官网链接:
主要特性:
- 核心改进:完全兼容虚拟线程和JDK 21,新的虚拟线程任务执行器,Project CRaC的生命周期集成用于JVM检查点恢复,增强对异步/响应式方法和调度的支持,改进可观察性检测。
- Web和REST增强:控制器参数的内置方法验证,新的具有同步HTTP客户端功能的
RestClient
,HTTP接口客户端改进,WebFlux中对Kotlin协程的支持。 - 数据访问更新:新的
JdbcClient
用于统一查询/更新语句,通过TransactionExecutionListener
增强事务管理,改进数据库操作的异常转换。 - 消息和测试:STOMP消息顺序配置选项,增强的测试功能如
@RecordApplicationEvents
,改进AOT(提前编译)处理支持。 - 关键基线升级:SnakeYAML 2.0、Jackson 2.14、Kotlin Coroutines 1.7、Kotlin Serialization 1.5。
- JDK 21与虚拟线程:全面支持JDK 21 LTS,包括密封类、模式匹配等新特性,优化虚拟线程配置,提供
SimpleAsyncTaskExecutor
的虚拟线程模式。 - 可观察性升级:整合Micrometer改进版本,提供更好的HTTP请求监控和异步缓存支持。
# 6.2(2024年11月)
官网链接:
主要特性:
- 增强核心容器:修订自动装配算法,支持"回退beans",后台bean初始化,引入
@Bean(bootstrap = BACKGROUND)
支持异步初始化非关键Bean。 - 改进开发体验:简化原生应用的反射提示注册,支持属性占位符转义,增强SpEL索引支持。
- Web和测试改进:MockMvc的AssertJ支持,
@ExceptionHandler
的内容协商,测试中的动态属性注册,到Lists/Maps/Arrays的构造函数数据绑定,从headers进行数据绑定,片段渲染支持。 - URL和解析增强:两个新的URL解析器实现,用于尾部斜杠匹配的
UrlHandlerFilter
。 - 其他显著变化:升级基线要求,移除弃用的API,改进任务调度元数据,支持分区cookies,增强错误处理机制。
- 关键技术变化:更严格的泛型类型匹配,修订属性占位符解析,更灵活的SpEL编译,改进反射和索引能力。
# 总结
Spring的演进始终围绕简化开发和技术趋势适配展开:
- 编程范式:从XML到注解,再到响应式和函数式编程。
- 生态整合:从Java EE到云原生,构建庞大技术生态(Spring Data、Spring Cloud等)。
- 性能优化:非阻塞I/O、背压机制和容器化支持,应对高并发场景。
如需详细文档,请访问Spring官方文档 (opens new window)或GitHub版本日志 (opens new window)。
祝你变得更强!
编辑 (opens new window)
上次更新: 2025/08/16