写点什么

你应该将应用迁移到 Spring 4 的五个原因

  • 2015-12-13
  • 本文字数:2814 字

    阅读完需:约 9 分钟

Rafal Borowiec 是一位软件开发者、项目领导、敏捷实践者与演讲者,同时也是一名热情的开源爱好者。近日,他谈到了为何要将你的Java 应用迁移到Spring 4 上。

Spring 框架最初发布于 2004 年,距今已经过去 10 多年了。在过去的 10 年间,Spring 随着 Java 的变迁也得到了长足的发展,从一开始的 IoC 与 AOP 框架到现在涵盖各个业务领域、各种技术场景的一站式服务平台。目前的 Spring 拥有众多子项目,如 Spring Batch、Spring Data、Spring Mobile、Spring Boot、Spring Security、Spring Social、Spring Shell、Spring Integration 等等,基本上针对各种业务场景都提供了相应的解决方案。此外,Spring 框架也在随着 Java 版本的更迭而不断演变着。虽然 IoC 与 AOP 依然是 Spring 框架重要的两个基石,但不得不说的是,现在的 Spring 已经远远超越了 IoC 与 AOP 的范畴。Spring 框架也大量应用于各种企业与互联网项目中;但值得一提的是,由于种种因素的存在,目前依然有不少项目还在使用 Spring 3。实际上,Spring 4 已经发布了很长一段时间,同时也针对 Java 8 进行了大范围的更新。那么,我们是否有必要将现有的应用迁移到 Spring 4 呢?诚然,对于既有的成熟系统来说,进行软件的版本升级终归不是一件容易的事情,因为这不仅涉及到 Spring 本身的升级,还涉及到与之相关的各种依赖的升级,稍有不慎就会造成业务无法正常访问的后果;但这并不是说我们就不能升级 Spring 了,通过完善的测试,细粒度的升级计划,我们依然可以品尝到 Spring 4 为我们所带来的一切便利;另外,对于新系统来说,直接使用 Spring 4 未尝不是一个好的选择。下面,我们就来看看有必要将系统升级到 Spring 4 的五个原因。

1. 使用 Java 8 进行更快的开发

Java 8 发布于 2014 年,它是 Java 自 1.5 以来变化最大的一次升级。毫无疑问,你应该考虑将所用的 JDK 升级到 Java 8,原因如下:

  • Java 8 更快
  • Java 8 拥有 Lambda 表达式
  • Java 8 拥有 Streams API
  • Java 8 提供了全新的 Date 与 Time API

此外,读者朋友不要忘记,Java 7 现在已经 EoF 了。Spring 4 是该框架首个完全支持 Java 8 的版本,如果想要在 Spring 中使用 Java 8,那毫无疑问,你应该进行升级。借助于 Spring 4 与 Java 8,完成同样的功能你可以使用更加紧凑、整洁的代码来实现。比如说,Spring 中很多既有的和新的接口都是函数式接口,他们可用在 Lambda 表达式中。Spring Core 现在已经完全支持 Java 8 新的 Date 与 Time API,还可以在 Thymeleaf 视图与 Spring Data JPA 中使用他们。此外,Spring 4 还支持 java.util.Optional。比如说,你可以通过 @RequestParam、@RequestHeader 与 @MatrixVariable 进行注入。Spring 4 还提供了对 Stream、Charset、Currency 与 TimeZone 开箱即用的转换器支持。

2. 提升生产力

Spring 的每一次发布都带来了大量的改进,这些改进可以简化我们的开发工作。越来越多需要通过自定义解决方案才能实现的任务现在都已经成为了 Spring 框架的一部分。比如说,在 Spring 中,Java 泛型类型的注入现已梦想成真。Spring 会自动将泛型当作 @Qualifier 的一种形式。@EventListener 与泛型事件的引入简化了 Spring 应用中事件的处理。Spring 不仅引入了对 JCache(JSR-107)的支持,还随着时间的推移改进了自身的缓存抽象层。如果使用了 JMS,那么你会感受到这种改进,这主要是通过配置(@EnableJms)与注册端点(@JmsListener)来实现的。

此外,Spring 测试基础设施也发生了很大的变化,现在可以更快地创建集成测试了。Spring 4 提供了新的 TestTransaction API,可以实现编程式的事务管理、可以基于每个类或是每个方法来执行 SQL 脚本,还可以根据 JUnit 规则而非 JUnit 测试运行器来执行测试。以上这些都是 Spring 4 测试基础设施改进的冰山一角。

3. 与时俱进

Spring 框架能与其他很多框架和第三方库共存,并且还可以将其集成进来。当使用了 Spring 4 后,其相应的依赖也会一并得到更新,这样就可以使用最新的库了。Spring 可以很好地集成 JEE APIs,如 JMS 2.1、JPA 2.1、Bean Validation 1.1 以及之前提到的 JCache。此外,Spring 还对 javax.money 包中的类型提供了绑定与转换支持。它集成了 Gson(Jackson 的一个替代方案)以及 Google Protocol Buffers 数据协议。

值得一提的是,Spring 4 还支持很多新标准,如 WebSockets、SockJS、HTTP Streaming 与服务端推事件。

4. 不再有 JAR 地狱的烦恼

对于使用了 Maven 或是 Gradle 的 Spring 应用来说,使用 Spring IO Platform 项目会对依赖的管理方式产生重要的影响。Spring IO Platform 对各种 Spring 项目及其依赖提供了版本化管理。在构建脚本中,声明依赖时可以不必再考虑版本号了。

由于升级依赖版本时可能会出现一些问题,这导致一些开发者不敢轻易尝试。不过,借助于 Spring IO Platform,这些担忧都将烟消云散。很多时候,升级 Platform 所支持的全部依赖时,你所要做的只不过是修改一下 Platform 的版本而已。

5. 做一个开心的程序员

很多开发者都喜欢使用最新的技术。将所用的框架升级到最新版会激发他们的生产力,他们也会因此学习到新的技术并改进自己的技能。这也是保持开发者动力,避免他们认为自己一直在从事遗留项目的绝佳方式。

实际上,当升级到 Spring 4 后,开发者将会自觉不自觉地开始学习 Java 8;毕竟,在使用的过程中学习是最佳的学习方式。Java 8 是具有里程碑意义的一个 Java 版本,从这个版本开始,Java 开始提供函数式编程的一些特性,Java 开发者也可以使用 Lambda 表达式这一利器来简化开发;Spring 4 对 Java 8 提供的全方位支持也会促使 Java 开发者对框架与语言理解的不断深入。这反过来又会使得开发者对 Spring 4 所提供的新特性有更好的把握。

对于想要了解 Spring 4 与 Java 8 的各位读者,下面给出一些资料可供大家学习参考:

同时,下面还有一些从老版本的 Spring 迁移到 Spring 4 的一些注意事项与迁移指南:

各位 InfoQ 读者朋友们,你所在的项目使用了 Spring 么,使用的是哪个版本?你认为当前的版本是否足以应付业务的发展,是否有必要将 Spring 升级到最新版?当前使用的是哪个版本的 Java,是否有升级到 Java 8 的计划?值得一提的是,由于 Project Jigsaw 的缘故,Java 9 正式版的发布将会推迟到 2017 年,因此在未来的近两年时间内,Java 8 依旧是最值得每一个 Java 开发者深入学习的版本。你是否认为 Spring 4 与 Java 8 的搭配将会提升你的开发相率,不妨将你的看法写下来,与其他读者一同探讨。

2015-12-13 04:497993
用户头像

发布了 88 篇内容, 共 272.5 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

【顶会论文】时序数据库 Apache IoTDB 论文获 VLDB 2025 录用,集群秒级扩容性能“解密”

Apache IoTDB

【HarmonyOS】一步解决弹框集成-快速弹框QuickDialog使用详解

GeorgeGcs

【 HarmonyOS 】错误描述:The certificate has expired! 鸿蒙证书过期如何解决?

GeorgeGcs

面向对象设计与设计模式实战指南

qife122

设计模式 低层设计

大庆企业选等保测评公司,牢记这 5 个筛选要点

等保测评

从 Oracle 到 TiDB,通过ETL工具,高效实现数据拉通

谷云科技RestCloud

oracle 数据同步 ETL TiDB 数据集成平台

《小K闪电课堂》:秒懂 KaiwuDB/KWDB 数据库技术内核

KaiwuDB

数据库 数据库教程

如何让后端工程师愿意写文档?API管理的好处

谷云科技RestCloud

API 集成平台 API文档 API管理 ipaas

分布式架构基础

天翼云开发者社区

中间件 计算

破人才瓶颈、促生态共赢 ——2025 鸿蒙生态大会人才发展分论坛亮点纷呈

最新动态

大数据-85 Spark Action 操作详解:从 Collect 到存储的全景解析

武子康

Java 大数据 flink spark 分布式

通义灵码+支付 MCP:30 分钟实现创作打赏智能体

阿里巴巴云原生

阿里云 云原生 通义灵码

在LXC容器中安装Bitwarden密码管理器的完整指南

qife122

Docker Bitwarden

黑龙江等保测评安全技术服务:打造数字时代安全堡垒的秘密武器

等保测评

通义灵码+支付 MCP:30 分钟实现创作打赏智能体

阿里云云效

阿里云 云原生 通义灵码

什么是安全密钥,它是如何工作的

运维有小邓

mfa 多因素身份验证

让天下没有难查的故障:2025 阿里云 AI 原生编程挑战赛正式启动

阿里云云效

阿里云 云原生 云原生编程挑战赛

工业管理 项目管理经验总结(7)

万里无云万里天

项目管理 工业 工厂运维

哈尔滨三级等保:数字时代的安全 “定海神针

等保测评

分布式系统-秒杀

天翼云开发者社区

大数据 安全 中间件

2025 HarmonyOS创新赛线上解读会成功举办 助力开发者把握生态机遇

最新动态

技术文章

qife122

人工智能 openai

基于 Amazon Q Developer+Remote MCP 访问 Amazon Redshift

亚马逊云科技 (Amazon Web Services)

智能运维新范式:自动化如何提升企业IT效率

智象科技

自动化 智能运维 告警系统 告警规则 一体化智能运维

Karma无线安全工具:探针响应与网络诱捕技术解析

qife122

网络安全 渗透测试

kafka数据同步到mysql

天翼云开发者社区

数据库复制

qData 数据中台【开源版】发布 1.0.4 版本,全面升级数据清洗与资产管理能力

千桐科技

数据中台 qData 开源数据中台 Java数据中台 千数平台

节能LED显示技术:点亮未来

Dylan

广告 LED LED display LED显示屏 LED屏幕

CMDB配置漂移治理方案

智象科技

自动化 CMDB IPMI SNMP协议 自动采集

让天下没有难查的故障:2025 阿里云 AI 原生编程挑战赛正式启动

阿里巴巴云原生

阿里云 云原生 变成挑战赛

崩了!Nacos升级到3.0竟不能用了,哭死!

王磊

你应该将应用迁移到Spring 4的五个原因_语言 & 开发_张龙_InfoQ精选文章