前言
《SSM 搭建精美实用的管理系统》这个专栏是 2018 年 7 月 19 日在 GitChat 平台进行预售,并于 2018 年 10 月 16 日更新完成,这是一个偏实战类的专栏,大部分章节都涉及到编码工作,涉及到编码的章节我也都提供了对应的源码压缩包。
该专栏最终实现的是一个后台管理系统,项目的预览图大家可以在课程介绍中看到,而这个后台管理系统的源码是在我的一个开源项目 ssm-demo 的基础上进行开发和优化的:
ssm-demo 项目开发时应该是 2016 年底的时候,之后是选择将这个项目开源到 GitHub 开源平台上,18 年与 GitChat 平台合作,重新开发和整理了这个项目并整理了当前的专栏,本专栏中的源码主要是对页面和交互进行了升级和优化,后端代码虽然也进行了很大的更新,但是项目中用到的 Spring 及相关依赖并没有进行更新。
Spring 5 版本的专栏源码,来了
2016 年那个时间点在 Java Web 项目开发时使用 Spring 4.X 版本是一个比较普遍的现象,并不会让人觉得版本落后。当然,目前还有很大一部分企业级的应用依然在用 Spring 4.X 版本,这也是一个很棒的选择,同时 Spring 官方团队其实也在更新和维护 4.X 版本,所以这里并不是让大家做版本之争,或者觉得一定要用某一个版本才行,我们只是做一个选择而已,选择更适合自己、更适合团队的就可以了。
Spring 5 是一个非常重要的版本更新,在它的开源仓库中也可以看到这个版本的更新频率很高,大家应该都会相信这个版本在企业开发中会逐渐的占到越来越大的份额,为了让大家有更好的学习体验,保证大家学到的知识不过时,我决定更新升级本专栏中涉及到的实战源码,Spring 4.X 版本的代码我会保留,同时增加 Spring 5.X 版本的代码,供大家自由选择。
更新缘由
专栏更新的主要缘由如下:
- 首先,我们处于 IT 行业,这个行业是一个更新迭代非常快的行业,一旦跟不上知识更新的步伐就容易掉队,所以要及时更新迭代我们个人的技能点。
- 其次是每年过年前的一段时间都不会特别忙碌,在这个时间点就想到这个专栏也到了更新的时间点了,并和 GitChat 的编辑人员进行了沟通和确认,当时只是初步沟通和计划,并没有具体落实。
- 同时,作为专栏的作者,我要对这个专栏负责、对 GitChat 平台负责、对每位购买过和想要购买的用户负责,为平台打造更多更好的内容,让大家有更好的学习体验,保证大家学到的知识不过时。
- 最后,我也向大家承诺,虽然我也在做其他的开源项目,制作上线其他的线上专栏,我依然会实时的关注这个专栏并一直维护这个专栏,一旦有比较重要的版本更新我都会及时升级这个专栏中的内容,请大家放心。
Spring 5 新特性
这次课程代码升级的主要原因是 Spring 框架的大版本升级,所以我们先来了解一下 Spring 5 的相关知识点。
Spring 5 是 Spring 框架 4.0 之后的第一个主要版本,重要变动如下所示:
常规升级
- 为了充分利用 Java 8 特性,Spring 框架的代码库已进行了改进,而且该框架要求将 Java 8 作为最低的 JDK 版本。
- Spring 5 支持 Java EE 7,并且与 Java EE 8 兼容。
- Spring 5 应用程序首选服务器版本是 Tomcat 8.5+,Jetty 9.4+ 和 WildFly 10+。
Spring Framework 5.0 遵守 JDK 8 和 Java EE 7 规范,这意味着以前的 JDK 和 Java EE 版本不再受支持了。
Servlet 服务器中 Tomcat 的最低版本为 8.5,这里需要特别注意一下,本专栏中功能演示时所使用的 Tomcat 版本为 8.5.31。
删除了部分包、类及方法
- 删除了如下包:beans.factory.access、jdbc.support.nativejdbc、mock.staticmock、web.view.tiles2。
- Spring Framework 5.0 同时也停止了对以下库的支持:
- Portlet
- Velocity
- JasperReports
- XMLBeans
- JDO
- Guava
- 删除了很多过时的类和方法。
Spring 官方建议:如果你正在使用任何上面的包,建议你将 Spring 框架的版本维持在 4.3.x。
核心 API 增强功能
核心的 Spring Framework 5.0 已经利用 Java 8 所引入的新特性进行了修订,比较关键的一些如下:
- 基于 Java 8 的反射增强,Spring Framework 5.0 中的方法参数可以更加高效的进行访问。
- 核心的 Spring 接口现在提供基于Java 8 的默认方法构建的选择性声明。
- 用 @Nullable 和 @NotNull 注解来显示表明可为空的参数和以及返回值。这样就够在编译的时候处理空值而不是在运行时抛出 NullPointerExceptions。
- 在日志记录方面, Spring Framework 5.0 带来了 Commons Logging 桥接模块的封装, 它被叫做 spring-jcl 而不是标准的 Commons Logging。当然,无需任何额外的桥接,新版本也会对 Log4j 2.x、SLF4J、JUL(java.util.logging)进行自动检测。
核心容器更新
Spring 5 现在支持候选组件索引作为类路径扫描的替代方案,该功能已经在类路径扫描器中添加,以简化添加候选组件标识的步骤。
- 在 GenericApplicationContext 和 AnnotationConfigApplicationContext 中实现函数式编程风格。
- 对接口方法的事务、缓存和异步注释的一致性检测。
- 将 XML 配置命名空间简化为无版本化的模式。
响应式编程支持
响应式编程是 Spring 5 最重要的特性之一。
响应式编程提供了另一种编程风格,专注于构建对事件做出反应的应用程序。Spring 5 包含 Reactive Streams(定义与语言无关的响应性 API)和 Reactor(Spring Pivotal团队提供的Reactive Streams的 Java 实现),用于其自身的反应性使用以及许多核心 API。
我们的项目中并没有代码与此相关,因此并没有影响。
Kotlin 语言的支持
Spring 5 引入了对 JetBrains Kotlin 语言的支持,Kotlin 是一种支持函数式编程编程风格的面向对象语言。Kotlin 运行在 JVM 之上,但运行环境并不限于 JVM。
有了对 Kotlin 的支持,开发者可以进行深度的函数式 Spring 编程,特别是在函数式 Web 端点以及 Bean 注册这些方面。
测试方面的提升
Spring Framework 5.0 完全支持 JUnit 5 Jupiter,所以可以使用 JUnit 5 来编写测试以及扩展。此外还提供了一个编程以及扩展模型,Jupiter 子项目提供了一个测试引擎来在 Spring 上运行基于 Jupiter 的测试。
另外,Spring Framework 5 还提供了在 Spring TestContext Framework 中进行并行测试的扩展。
以上内容主要参考 Spring 5.x 新特性官方文档,大家可以点击这个链接去看一下官方总结的新特性。
我们的源码更新了哪些内容
主要的版本升级
- Spring 版本是选择了比较新的版本,由原来的 4.2.4.RELEASE 升级到 5.2.2.RELEASE,这个版本是在 2019 年 10 月 3 日正式发布,版本更新日志为 v5.2.2.RELEASE。
- Spring MVC 的版本也随着 Spring 的版本而更新,也是 5.2.2.RELEASE。
- MyBatis 的版本升级到 3.5.2,MyBatis 3.5 以上版本对应的就是 Spring 5 以上版本,Spring 4 不支持 MyBatis 3.5 以上版本,对应的 mybatis-spring 的版本也需要升级到 2.0 以上的版本,我选择的是 2.0.1。
以上是 SSM 三大框架的版本升级,版本号是我自己选择和整合的,你可以进行微调,但是一定要注意测试,不要报错。
- Druid 数据源的版本号升级到最新的 1.1.21,常规更新,选择最新版本即可。
- JDBC 驱动类升级到 8.0.16,因为最新的 MySQL 数据库版本已经是 8+,该驱动类也支持 5.x 版本的 MySQL 数据库。
- Excel 工具依赖 POI 的版本升级到 4.1.1 版本。
- 其它工具类的常规升级。
并不是一定要按照我给出的版本号进行更改,大家可以自行选择合适的版本。
更新前的版本号如下:
更新后的版本号如下:
代码更新
当然,不仅仅只是版本的升级,以上这些依赖在升级后,有些代码也需要进行微调,不然会报错或者你会在代码中调用到已经标注为过期的类或方法,因此也涉及到的一些代码更改,比如 POI 版本升级后就涉及到一些常量的更新,Druid 版本升级后需要更换一下配置类,还有 JDBC 驱动类依赖升级后需要修改驱动类名,这些更改我都已经处理好并且上传到我们课程的百度云盘中,在原来代码包的基础上又增加了一个版本升级的源码压缩包,大家可以在每个章节中的源码查看:
从上方的百度云盘截图可以看出,我保留了第一版本的源码包,也上传了版本更新升级后的源码压缩包,大家可以自行选择使用哪份源码。
其他
由于更新的内容比较多,主要的内容都已经整理到文章中,可能还会有一些代码微调,后续我会继续整理。
时间安排
过年前,通常不会特别忙,工作强度低了很多,手头上很多的工作都完成得差不多了,由于当时在做一个 Spring Boot 项目的版本升级,因此那几天对于一些版本号比较敏感,Spring Boot 2.X 版本是基于 Spring 5 的,由此就联想到了我的这个专栏,接着就开始计划专栏版本升级。
将 GitChat 专栏更新加入到我的 2020 年待办事项之后,我赶紧与负责对接的专栏编辑人员联系,2020 年 1 月 19 日与编辑确认了更新事宜,本来是打算在 2020 年 3 月份或者 4 月份的时候,花一些周末的时间来处理,毕竟我还是要正常上班的,所以只能抽一些零散的周末时间去做。
按照原本的计划可能要花上一些时间才能完成这次更新,但是计划赶不上变化,由于“新型冠状病毒”疫情的影响,打乱了所有的假期安排,假期的时间也是一再地充值,特殊时期不能出门,只好每天闷在家里,这些日子也在不断把我的 2020 年待办事项给处理掉,应该是在 2020 年 2 月 9 日左右开始着手处理《SSM 搭建精美实用的管理系统》专栏的更新。
首先是查询了 Spring 5 的一些新特性以及升级时的注意事项,主要是保证 Spring 4 升级到 Spring 5 时项目不会有太多的问题,之后是查询了 Spring MVC/MyBatis 的版本升级情况,确定了主要框架的版本后开始进行代码更新,2 月 11 日完成了新版本的整合和验证,之后是把专栏中每一篇牵涉到编码的课程中的源码进行了升级并且验证完成。当然,也不仅仅是改一下版本号这么简单,有些框架在版本更新后需要修改编码或者配置内容,这些坑我也都处理完了,时间点是在 2 月 16 号左右,大家可以直接运行和学习版本升级后的源码。
由于一些意外,专栏的迭代进度比原计划的时间提前了一个多月,完成了课程代码的版本升级和更新操作后,又花了些时间把一些注意事项和更新内容向大家介绍一下,这篇文章花了一周的时间整理,我想了很久该和大家说什么,或者交代些什么,纠结了很久,所有的话也都在这篇文章中了,主要是告诉大家为什么更新、更新了什么,还有一些注意事项也记录在文章里了,大家有不了解的也可以直接和我沟通。
总结
本篇文章主要是对这次源码更新的一次总结,从规划到确认,之后是具体地去开发和整理,最终呈现到大家的面前,文章中的内容起到的更多是引导的作用,由 Spring 4 跨越到 Spring 5 的实战开发课程。
你,准备好了吗?