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 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的搭配将会提升你的开发相率,不妨将你的看法写下来,与其他读者一同探讨。