2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

你应该将应用迁移到 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:498028
用户头像

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

关注

评论

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

安势信息加入Linux基金会OpenChain项目,助力软件供应链安全

安势信息

Linux 开源 DevSecOps SCA 开源软件

2022 核心服务动手训练营

亚马逊云科技 (Amazon Web Services)

Amazon 亚马逊云

Agora Web UIKit:快速构建视频通话或直播

devpoint

React 直播技术 视频通话

MSVC编译动态库

Loken

音视频 5月月更

在线数字转成人民币大写

入门小站

工具

天猫精灵的自定义语音技能创建流程

汪子熙

人工智能 机器学习 机器人 机器人流程自动化 6月月更

【愚公系列】2022年06月 二十三种设计模式(十九)-观察者模式(Observer Pattern)

愚公搬代码

6月月更

换个角度带你学C语言的基本数据类型

华为云开发者联盟

开发 C语言 数据类型位数

磁盘I/O性能测试工具

穿过生命散发芬芳

6月月更 磁盘测试工具

字节跳动一站式数据治理解决方案及平台架构

字节跳动数据平台

数据治理 元数据

ObserverPattern-观察者模式

梁歪歪 ♚

设计模式

在线HTML转PERL工具

入门小站

工具

儿童节,和 AI 一起通关 “超级马里奥兄弟”

华为云开发者联盟

leetcode 547. Number of Provinces 省份数量(中等)

okokabcd

LeetCode 搜索

对不起,我错了,这代码不好写

捉虫大师

Java Go sentinel 6月月更

ConcurrentLinkedQueue

急需上岸的小谢

6月月更

常遇到读多写少,教你用ReadWriteLock实现一个通用的缓存中心

华为云开发者联盟

缓存 高并发 开发 ReadWriteLock

MixNet解析以及pytorch源码

AI浩

人工智能 6月月更

云图说丨应用宕机怎么办?MAS帮您实现业务无缝切换

华为云开发者联盟

云计算 MAS 宕机 多云高可用服务

InfoQ 极客传媒 15 周年庆征文|深入理解 ELK 中 Logstash 的底层原理 + 填坑指南

悟空聊架构

运维 Logstash ELK 6月月更 InfoQ极客传媒15周年庆

彰显个性│博客园的自定义主题

主题 可视化看板 6月月更

特别的儿童节,OceanBase 送上一份特别的惊喜

OceanBase 数据库

oceanbase

应用实践|Lifewit 数据平台基于Apache Doris的建设实践

SelectDB

数据库 数据仓库 apache doris SelectDB

StrategyPattern-策略模式

梁歪歪 ♚

设计模式

linux之同时监控多个日志文件变化

入门小站

Linux

Django API 开发:Todo 应用的 React 前端

宇宙之一粟

django React API 6月月更

深入剖析 | HeartBeat方案的标准设计

九叔(高翔龙)

架构 dubbo 源码解析 HeartBeat 心跳设计

对话ACE第三期:数据库技术生态应如何构建

OceanBase 数据库

oceanbase

TemplateMethodPattern-模板方法模式

梁歪歪 ♚

设计模式

科技成就伟大游戏 | 2022 亚马逊云科技游戏开发者大会

亚马逊云科技 (Amazon Web Services)

开发者 亚马逊云

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