从SSM进阶到Spring Boot课程的教学内容设计
作者: 王崟 陆莉莉
摘要:SSM框架和Spring Boot框架是近些年主流的Java企业级应用框架。文本分析了两种框架的关系以及差异,给出了在具备SSM基础的前提下,Spring Boot课程的教学重点分析。最后详细介绍了Spring Boot课程的教学内容组织和实施过程。
关键词:SSM;Spring Boot;教学内容设计
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2022)26-0163-04
1 引言
SSM(Spring+SpringMVC+MyBatis)框架是近些年常见的Java企业级应用开发的框架,它能使项目具有高度的可维护性和扩展性[1]。而传统SSM框架繁重的配置以及集成第三方技术难度大等缺点使得Spring Boot框架产生了。一些软件技术专业除了开设基本的Java Web课程之外,也会开设这些框架课程。本人所在专业先开设SSM课程,然后再以两周实训形式开设Spring Boot课程。本人通过教学经验,浅谈在具备SSM基础的前提下,如何开展Spring Boot教学。详细介绍了课程的教学内容设计,特别是与SSM课程的衔接。
2 SSM和Spring Boot框架的关系以及开发中的差异
2.1 SSM和Spring Boot框架的关系
Spring Boot是Spring家族的一个子项目,它的设计目的是用来简化基于Spring的应用的搭建以及开发过程。Spring Boot框架可以看成一个“自动化”配置的框架,它让构建独立的Spring生产级别应用变得简单,它可以对Bean进行自动化的配置[2]。配置简化之后,开发人员能更专注于应用程序功能,不用在配置上花太多功夫。如果在Spring Boot框架下开发基于Spring MVC和Mybatis的应用,从控制器代码到持久层代码的编写上并无明显区别。
2.2 从SSM到Spring Boot开发上的差异
根据上面介绍的两种框架之间的关系,在从SSM进阶到Spring Boot的过程中,两者开发上的差别如下:
(1) 依赖管理的差别
在使用SSM框架的时候需要加入很多不同的第三方依赖,还得自行调配依赖的版本。一个SSM项目可能需要在POM中添加十几个甚至更多的依赖。
而Spring Boot通过提供众多起步依赖来降低项目依赖的复杂度,起步依赖名字中都含有“starter”。起步依赖本质上是一个POM,定义了对其他库的传递依赖,这些依赖组合起来,即可支持某项功能[3]。这样开发的时候只需要加入少量的starter依赖即可进行某种特定类型的应用开发。例如:做基本的Spring开发,只要加入spring-boot-starter,就会把Spring的基本依赖都传递进来。如果要做Web开发,只要加入spring-boot-starter-web依赖。开发者不需要再考虑具体需要哪些Jar包,引入相关起步依赖就行了。
除此之外,起步依赖中各个依赖版本之间的兼容性都经过了精心的测试,基本不用担心冲突。此外Spring Boot利用Maven的依赖管理功能,继承了很多常用库的依赖版本,添加依赖时就可以不用指定版本号。
(2) 配置的差别
在SSM框架中往往使用XML方式配置和装配第三方Bean,因此项目中会存在大量配置文件来配置第三方Bean。而通过Java方式注册和装配Bean是Spring Boot推荐的配置方式,其可以根据依赖自动创建、配置和装配Bean,开发者只需要写少量必需的配置即可。配置方式也从XML格式的Spring配置文件转变为properties属性文件或者yml文件。
3 从SSM进阶到Spring Boot框架的教学重点分析
由于Spring Boot框架和SSM框架的重点差异在于“自动化”配置,而不在于应用程序代码本身。学生已经学过了SSM课程,对于这三个框架的基本使用已经无须再重复学习,学习的重点就落在了如何让学生理解“自动化”配置是如何实现的,以及如何将一个SSM应用转换成基于Spring Boot的应用。Spring Boot教学重点分析如下:
3.1 强化“自动化”配置实现的基础
Spring Boot自动化配置的基本思路就是根据特定条件来控制Bean的创建。因此通过Java方式注册和装配Bean是Spring Boot实现自动化配置的基石之一,结合@Conditional条件注解,便可以通过代码来控制Bean的创建,这是使用XML配置Bean做不到的。此外由于Spring Boot将使用外部属性文件来进行配置,所以必须理解外部属性注入Bean的几种方式。
3.2 学习使用起步依赖
在开发Spring Boot项目时,在POM中继承spring-boot-starter-parent。此外也不需要再添加独立的单个依赖,直接添加Spring Boot相应的起步依赖就行了。学生必须学习如何选择和添加需要的起步依赖。除了直接使用起步依赖,还要学会如何覆盖起步依赖引入的传递依赖。例如Spring Boot默认使用内置Tomcat,如果想使用Jetty,可以把starter-tomcat排除,添加starter-jetty。如果打算部署到本地Tomcat,不使用内置服务器,可以直接排除starter-tomcat。如果添加的起步依赖中包含的某个传递依赖的版本不合适,可以将其排除,再添加一个合适版本的依赖。
3.3 学习写自己的Starter
为了能更好地理解自动化配置,应该学习写一个包含自动化配置的Starter,模仿Spring Boot的自动配置,并将自己写的Starter依赖加入某个Spring Boot项目中,观察其如何根据条件在启动过程中创建Bean[4]。
3.4 将SSM传统案例改造成基于Java方式注册和装配Bean
SSM课的传统案例均是使用XML方式来配置和装配第三方Bean。在学习Spring Boot的时候可以将其改造成基于Java方式注册和装配Bean。通过这种方式可以很清楚地看出进行某方面开发时,需要哪些最基本的Bean及它们之间的关联,以及这些Bean如何被创建出来,需要用户提供哪些配置属性。之后再引入Spring Boot自动配置和外部属性,删除自定义的Java配置类,便能明白Spring Boot做了哪些自动配置。
4 Spring Boot课程教学内容和实施过程
实际教学中,Spring Boot课程以两周实训的形式安排在SSM课程结束之后。Spring Boot学习和开发内容如下:
4.1 通过Java方式注册和装配Bean
在此阶段并不使用Spring Boot的自动配置,但为了和之后的Spring Boot依赖接轨,直接加入Spring Boot的起步依赖,而不是单独加入Spring依赖。这部分内容以文档和小项目形式教授下面内容:
(1) 通过Java方式注册和装配Bean
使用一个案例进行几个Bean的创建和装配,学习@Configuration和@Bean注解的使用,多个配置类的组合使用,使用@ComponentScan注解扫描包来发现配置类。具体教学内容如表1所示:
(2) 从属性文件注入值
由于Spring Boot将使用外部属性文件来进行配置,为了理解这些外部属性如何用来配置Bean,需要学习引入外部属性文件,并将属性值注入Bean。注入方式主要有两种:一种是使用@Value注解,另一种是使用@ConfigurationProperties注解。后者是Spring Boot从外界接收属性配置的主要方式。除了外部属性文件,还需要了解属性的其他来源。具体教学内容如表2所示:
(3) 条件化创建Bean-使用@Conditional注解
这部分在前面案例的基础上,完成案例“晴天坐公交车上班,雨天开小汽车上班”。展示如何创建条件类,以及在配置类和方法上使用@Conditional注解,在条件满足时创建Bean。
(4) 使用@Profile注解
这部分在@Conditional注解案例的基础上改造,使用@Profile注解来指示某个配置类或者@Bean在哪些Profile下被激活,以及常用的激活Profile的方式。最后展示@Profile和ProfileCondition类的源码,让学生理解@Profile是一种预制的Condition类。
4.2 Spring Boot入门
这部分内容介绍Spring Boot项目的基本代码结构,常用注解和运行方式。重点介绍了自动化配置是如何实现的,并模拟Spring JDBC写一个包含自动化配置的Starter,并将其作为依赖加入Spring Boot案例中使用。学习内容和设计如下:
(1) Spring Boot入门
这是第一个Spring Boot例子,展示一个Spring MVC小案例,编写一个简单的控制器类,在页面上展示一行文字。学生将体会到搭建和运行一个基于Spring Boot的web应用比之前SSM课程中学习的Spring MVC框架简单很多。除此之外还会介绍热启动的配置方法,以及其他运行Spring Boot应用的方法。具体教学内容如表3所示:
(2) Spring Boot的起步依赖和自动配置
这部分为提供给学生的阅读材料,包含使用spring-boot-starter-parent作为parent的作用。如何选择和使用起步依赖,如何覆盖起步依赖引入的传递依赖的版本号。如何排除引入的依赖,并加入其他依赖。最后分析第一个Spring MVC案例,如果使用传统的XML配置方法,需要配置哪些Bean,而Spring Boot自动化配置做了什么。
(3) Spring Boot核心注解和配置
这部分主要介绍Spring Boot中的基本注解和配置。将之前“通过Java方式注册和装配Bean”中的案例移植到Spring Boot框架中,和Spring MVC小案例整合在一起。还要学习在Spring Boot中使用针对profile的属性文件。学习的主要内容如表4所示:
(4) 自动配置原理--写一个Starter
这部分模拟Spring JDBC中的DataSource,JdbcTemplate,并让Spring Boot应用启动时自动创建Bean。模拟的两个Bean创建条件如下:
①DataSource创建条件:当容器中没有DataSource Bean的时候创建,从属性文件中获得连接数据库的4项属性,设置到DataSource对象上。用户必须从外部提供url的值,如果不提供url值,不能创建DataSource Bean。
②JdbcTemplate创建条件:当容器中没有JdbcTemplate Bean,并且容器中存在1个且只有1个DataSource Bean时创建。
在之前的Spring MVC小案例中加入自定义的starter依赖,在application.properties文件中提供数据库连接的4项属性,测试和观察两个Bean的创建。此案例可以学习到Spring Boot如何加载自动配置类,从中获得Bean的信息,将要求的Bean建出来(在条件符合的前提下)。
4.3 Spring Boot和数据库
这部分的学习目标是学习Spring Boot为数据库访问做了哪些自动化的配置。学习如何通过属性文件进行数据库相关的配置。最后学习Spring Boot整合Mybatis的方法。