你应该将应用迁移到Spring 4的五个原因
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呢?诚然,对于既有的成熟系统来说。进行软件的版本号升级终归不是一件easy的事情,因为这不仅涉及到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的各位读者。以下给出一些资料可供大家学习參考:
- http://www.baeldung.com/java-8-spring-4-and-spring-boot-adoption
- https://spring.io/blog/2015/06/02/spring-4-and-java-8-adoption
- https://dzone.com/guides/the-java-ecosystem-2015-edition
同一时候,以下另一些从老版本号的Spring迁移到Spring 4的一些注意事项与迁移指南:
- https://spring.io/blog/2014/01/30/migrating-from-spring-framework-3-2-to-4-0-1
- https://github.com/spring-projects/spring-framework/wiki/Migrating-from-earlier-versions-of-the-spring-framework
各位InfoQ读者朋友们。你所在的项目使用了Spring么,使用的是哪个版本号?你觉得当前的版本号是否足以应付业务的发展,是否有必要将Spring升级到最新版?当前使用的是哪个版本号的Java,是否有升级到Java 8的计划?值得一提的是。因为Project Jigsaw的缘故,Java 9正式版的公布将会推迟到2017年。因此在未来的近两年时间内,Java 8依旧是最值得每一个Java开发人员深入学习的版本号。
你是否觉得Spring 4与Java 8的搭配将会提升你的开发相率,最好还是将你的看法写下来,与其它读者一同探讨。
你应该将应用迁移到Spring 4的五个原因的更多相关文章
- 将Spring实战第5版中Spring HATEOAS部分代码迁移到Spring HATEOAS 1.0
最近在阅读Spring实战第五版中文版,书中第6章关于Spring HATEOAS部分代码使用的是Spring HATEOAS 0.25的版本,而最新的Spring HATEOAS 1.0对旧版的AP ...
- 从Spring迁移到Spring Boot
文章目录 添加Spring Boot starters 添加应用程序入口 Import Configuration和Components 迁移应用程序资源 迁移应用程序属性文件 迁移Spring We ...
- Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践
Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践 Spring Boot + Nginx + Mysql 是实际工作中 ...
- Spring Security 解析(五) —— Spring Security Oauth2 开发
Spring Security 解析(五) -- Spring Security Oauth2 开发 在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决 ...
- spring boot / cloud (五) 自签SSL证书以及HTTPS
spring boot / cloud (五) 自签SSL证书以及HTTPS 前言 什么是HTTPS? HTTPS(全称:Hyper Text Transfer Protocol over Secur ...
- Spring Boot(十五):spring boot+jpa+thymeleaf增删改查示例
Spring Boot(十五):spring boot+jpa+thymeleaf增删改查示例 一.快速上手 1,配置文件 (1)pom包配置 pom包里面添加jpa和thymeleaf的相关包引用 ...
- Spring IOC(五)依赖注入
Spring IOC(五)依赖注入 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) 一.autowire 五种注入方式测试 ...
- Spring Cloud(五):Hystrix 监控面板【Finchley 版】
Spring Cloud(五):Hystrix 监控面板[Finchley 版] 发表于 2018-04-16 | 更新于 2018-05-10 | 在上一篇 Hystrix 的介绍中,我们提到 ...
- spring 学习(五):spring 事务
spring 学习(五):spring 事务 事务概要 一个数据库事务通常包含了一个序列的对数据库的读/写操作.它的存在包含有以下两个目的: 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同 ...
随机推荐
- flutter 快捷键
1.热重载 alt+\ 2.热重启 alt+shift+\ 3.快速生成模板 stf 直接生成有状态模板 4.模拟器中文输入法 http://www.mdpda.com/app/apk3670941. ...
- MySQL密码不能登陆问题
由于种种原因,在进行开发的时候我一直是基于Windows平台,并且以前初学的时候常常重装不同版本的 MySQL数据库.因此长时间不使用后就产生了一些冲突的问题. 简单描述下,今天用以前 ...
- Proxmox VE
Proxmox虚拟化环境是基于QEMU/KVM和LXC的开源服务器虚拟化管理解决方案.我们可以使用集成的易于使用的WEB界面或通过CLI管理虚拟机,容器,高可用集群,存储和网络. Proxmox VE ...
- RPD Volume 172 Issue 1-3 December 2016 评论04 end
这一篇作为本期的结束是因为发现后面的一些基本上也是EPR有关的会议内容, Contribution of Harold M. Swartz to In VivoEPR and EPR Dosimetr ...
- 1.5(学习笔记)Cookie
一.Cookie简介 Cookie是网站发送的一小段数据,在用户访问浏览网站时通过浏览器存储在用户的计算机上. 主要用于记录一些用户状态信息,例如记录用户的账号,当前所在地等,根据这些信息网站 可以提 ...
- python 文件操作与集合
对文件的操作 1.打开文件,获取句柄 2.根据句柄操作文件 3.关闭文件 现有文档 poem.txt 一天很短, 短得来不及拥抱清晨, 就已经手握黄昏. 一年很短, 短得来不及细品初春殷红窦绿, 就要 ...
- 上手 Webpack ? 这篇就够了!
JavaSript 模块化打包已混迹江湖许久.2009年,RequireJS 就提交了它的第一个版本,Browserify 接踵而至,随后其他打包工具也开始大行其道.最终,Webpack 从其中脱颖而 ...
- Nginx流量带宽请求状态统计(ngx_req_status)
介绍 ngx_req_status 用来展示 nginx 请求状态信息,类似于 apache 的 status, nginx 自带的模块只能显示连接数等等 信息,我们并不能知道到底 ...
- Centos7下ZABBIX安装全记录
安装之前务必关闭SELINUX Install Repository with MySQL database : rpm -i https://repo.zabbix.com/zabbix/3.4/r ...
- Swift,初始化
1.class中的值是没办法不赋值,不然会报错,那么就有个init的方法初始化(这个方法使得实例时必须加上参数) class test{ var a:String var b:Int init(a:S ...