国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

從SSM進(jìn)階到Spring Boot課程的教學(xué)內(nèi)容設(shè)計(jì)

2022-10-24 20:04:56王崟陸莉莉
電腦知識(shí)與技術(shù) 2022年26期

王崟 陸莉莉

摘要:SSM框架和Spring Boot框架是近些年主流的Java企業(yè)級(jí)應(yīng)用框架。文本分析了兩種框架的關(guān)系以及差異,給出了在具備SSM基礎(chǔ)的前提下,Spring Boot課程的教學(xué)重點(diǎn)分析。最后詳細(xì)介紹了Spring Boot課程的教學(xué)內(nèi)容組織和實(shí)施過(guò)程。

關(guān)鍵詞:SSM;Spring Boot;教學(xué)內(nèi)容設(shè)計(jì)

中圖分類(lèi)號(hào):G642? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A

文章編號(hào):1009-3044(2022)26-0163-04

1 引言

SSM(Spring+SpringMVC+MyBatis)框架是近些年常見(jiàn)的Java企業(yè)級(jí)應(yīng)用開(kāi)發(fā)的框架,它能使項(xiàng)目具有高度的可維護(hù)性和擴(kuò)展性[1]。而傳統(tǒng)SSM框架繁重的配置以及集成第三方技術(shù)難度大等缺點(diǎn)使得Spring Boot框架產(chǎn)生了。一些軟件技術(shù)專(zhuān)業(yè)除了開(kāi)設(shè)基本的Java Web課程之外,也會(huì)開(kāi)設(shè)這些框架課程。本人所在專(zhuān)業(yè)先開(kāi)設(shè)SSM課程,然后再以?xún)芍軐?shí)訓(xùn)形式開(kāi)設(shè)Spring Boot課程。本人通過(guò)教學(xué)經(jīng)驗(yàn),淺談在具備SSM基礎(chǔ)的前提下,如何開(kāi)展Spring Boot教學(xué)。詳細(xì)介紹了課程的教學(xué)內(nèi)容設(shè)計(jì),特別是與SSM課程的銜接。

2 SSM和Spring Boot框架的關(guān)系以及開(kāi)發(fā)中的差異

2.1 SSM和Spring Boot框架的關(guān)系

Spring Boot是Spring家族的一個(gè)子項(xiàng)目,它的設(shè)計(jì)目的是用來(lái)簡(jiǎn)化基于Spring的應(yīng)用的搭建以及開(kāi)發(fā)過(guò)程。Spring Boot框架可以看成一個(gè)“自動(dòng)化”配置的框架,它讓構(gòu)建獨(dú)立的Spring生產(chǎn)級(jí)別應(yīng)用變得簡(jiǎn)單,它可以對(duì)Bean進(jìn)行自動(dòng)化的配置[2]。配置簡(jiǎn)化之后,開(kāi)發(fā)人員能更專(zhuān)注于應(yīng)用程序功能,不用在配置上花太多功夫。如果在Spring Boot框架下開(kāi)發(fā)基于Spring MVC和Mybatis的應(yīng)用,從控制器代碼到持久層代碼的編寫(xiě)上并無(wú)明顯區(qū)別。

2.2 從SSM到Spring Boot開(kāi)發(fā)上的差異

根據(jù)上面介紹的兩種框架之間的關(guān)系,在從SSM進(jìn)階到Spring Boot的過(guò)程中,兩者開(kāi)發(fā)上的差別如下:

(1) 依賴(lài)管理的差別

在使用SSM框架的時(shí)候需要加入很多不同的第三方依賴(lài),還得自行調(diào)配依賴(lài)的版本。一個(gè)SSM項(xiàng)目可能需要在POM中添加十幾個(gè)甚至更多的依賴(lài)。

而Spring Boot通過(guò)提供眾多起步依賴(lài)來(lái)降低項(xiàng)目依賴(lài)的復(fù)雜度,起步依賴(lài)名字中都含有“starter”。起步依賴(lài)本質(zhì)上是一個(gè)POM,定義了對(duì)其他庫(kù)的傳遞依賴(lài),這些依賴(lài)組合起來(lái),即可支持某項(xiàng)功能[3]。這樣開(kāi)發(fā)的時(shí)候只需要加入少量的starter依賴(lài)即可進(jìn)行某種特定類(lèi)型的應(yīng)用開(kāi)發(fā)。例如:做基本的Spring開(kāi)發(fā),只要加入spring-boot-starter,就會(huì)把Spring的基本依賴(lài)都傳遞進(jìn)來(lái)。如果要做Web開(kāi)發(fā),只要加入spring-boot-starter-web依賴(lài)。開(kāi)發(fā)者不需要再考慮具體需要哪些Jar包,引入相關(guān)起步依賴(lài)就行了。

除此之外,起步依賴(lài)中各個(gè)依賴(lài)版本之間的兼容性都經(jīng)過(guò)了精心的測(cè)試,基本不用擔(dān)心沖突。此外Spring Boot利用Maven的依賴(lài)管理功能,繼承了很多常用庫(kù)的依賴(lài)版本,添加依賴(lài)時(shí)就可以不用指定版本號(hào)。

(2) 配置的差別

在SSM框架中往往使用XML方式配置和裝配第三方Bean,因此項(xiàng)目中會(huì)存在大量配置文件來(lái)配置第三方Bean。而通過(guò)Java方式注冊(cè)和裝配Bean是Spring Boot推薦的配置方式,其可以根據(jù)依賴(lài)自動(dòng)創(chuàng)建、配置和裝配Bean,開(kāi)發(fā)者只需要寫(xiě)少量必需的配置即可。配置方式也從XML格式的Spring配置文件轉(zhuǎn)變?yōu)閜roperties屬性文件或者yml文件。

3 從SSM進(jìn)階到Spring Boot框架的教學(xué)重點(diǎn)分析

由于Spring Boot框架和SSM框架的重點(diǎn)差異在于“自動(dòng)化”配置,而不在于應(yīng)用程序代碼本身。學(xué)生已經(jīng)學(xué)過(guò)了SSM課程,對(duì)于這三個(gè)框架的基本使用已經(jīng)無(wú)須再重復(fù)學(xué)習(xí),學(xué)習(xí)的重點(diǎn)就落在了如何讓學(xué)生理解“自動(dòng)化”配置是如何實(shí)現(xiàn)的,以及如何將一個(gè)SSM應(yīng)用轉(zhuǎn)換成基于Spring Boot的應(yīng)用。Spring Boot教學(xué)重點(diǎn)分析如下:

3.1 強(qiáng)化“自動(dòng)化”配置實(shí)現(xiàn)的基礎(chǔ)

Spring Boot自動(dòng)化配置的基本思路就是根據(jù)特定條件來(lái)控制Bean的創(chuàng)建。因此通過(guò)Java方式注冊(cè)和裝配Bean是Spring Boot實(shí)現(xiàn)自動(dòng)化配置的基石之一,結(jié)合@Conditional條件注解,便可以通過(guò)代碼來(lái)控制Bean的創(chuàng)建,這是使用XML配置Bean做不到的。此外由于Spring Boot將使用外部屬性文件來(lái)進(jìn)行配置,所以必須理解外部屬性注入Bean的幾種方式。

3.2 學(xué)習(xí)使用起步依賴(lài)

在開(kāi)發(fā)Spring Boot項(xiàng)目時(shí),在POM中繼承spring-boot-starter-parent。此外也不需要再添加獨(dú)立的單個(gè)依賴(lài),直接添加Spring Boot相應(yīng)的起步依賴(lài)就行了。學(xué)生必須學(xué)習(xí)如何選擇和添加需要的起步依賴(lài)。除了直接使用起步依賴(lài),還要學(xué)會(huì)如何覆蓋起步依賴(lài)引入的傳遞依賴(lài)。例如Spring Boot默認(rèn)使用內(nèi)置Tomcat,如果想使用Jetty,可以把starter-tomcat排除,添加starter-jetty。如果打算部署到本地Tomcat,不使用內(nèi)置服務(wù)器,可以直接排除starter-tomcat。如果添加的起步依賴(lài)中包含的某個(gè)傳遞依賴(lài)的版本不合適,可以將其排除,再添加一個(gè)合適版本的依賴(lài)。

3.3 學(xué)習(xí)寫(xiě)自己的Starter

為了能更好地理解自動(dòng)化配置,應(yīng)該學(xué)習(xí)寫(xiě)一個(gè)包含自動(dòng)化配置的Starter,模仿Spring Boot的自動(dòng)配置,并將自己寫(xiě)的Starter依賴(lài)加入某個(gè)Spring Boot項(xiàng)目中,觀察其如何根據(jù)條件在啟動(dòng)過(guò)程中創(chuàng)建Bean[4]。

3.4 將SSM傳統(tǒng)案例改造成基于Java方式注冊(cè)和裝配Bean

SSM課的傳統(tǒng)案例均是使用XML方式來(lái)配置和裝配第三方Bean。在學(xué)習(xí)Spring Boot的時(shí)候可以將其改造成基于Java方式注冊(cè)和裝配Bean。通過(guò)這種方式可以很清楚地看出進(jìn)行某方面開(kāi)發(fā)時(shí),需要哪些最基本的Bean及它們之間的關(guān)聯(lián),以及這些Bean如何被創(chuàng)建出來(lái),需要用戶提供哪些配置屬性。之后再引入Spring Boot自動(dòng)配置和外部屬性,刪除自定義的Java配置類(lèi),便能明白Spring Boot做了哪些自動(dòng)配置。

4 Spring Boot課程教學(xué)內(nèi)容和實(shí)施過(guò)程

實(shí)際教學(xué)中,Spring Boot課程以?xún)芍軐?shí)訓(xùn)的形式安排在SSM課程結(jié)束之后。Spring Boot學(xué)習(xí)和開(kāi)發(fā)內(nèi)容如下:

4.1 通過(guò)Java方式注冊(cè)和裝配Bean

在此階段并不使用Spring Boot的自動(dòng)配置,但為了和之后的Spring Boot依賴(lài)接軌,直接加入Spring Boot的起步依賴(lài),而不是單獨(dú)加入Spring依賴(lài)。這部分內(nèi)容以文檔和小項(xiàng)目形式教授下面內(nèi)容:

(1) 通過(guò)Java方式注冊(cè)和裝配Bean

使用一個(gè)案例進(jìn)行幾個(gè)Bean的創(chuàng)建和裝配,學(xué)習(xí)@Configuration和@Bean注解的使用,多個(gè)配置類(lèi)的組合使用,使用@ComponentScan注解掃描包來(lái)發(fā)現(xiàn)配置類(lèi)。具體教學(xué)內(nèi)容如表1所示:

(2) 從屬性文件注入值

由于Spring Boot將使用外部屬性文件來(lái)進(jìn)行配置,為了理解這些外部屬性如何用來(lái)配置Bean,需要學(xué)習(xí)引入外部屬性文件,并將屬性值注入Bean。注入方式主要有兩種:一種是使用@Value注解,另一種是使用@ConfigurationProperties注解。后者是Spring Boot從外界接收屬性配置的主要方式。除了外部屬性文件,還需要了解屬性的其他來(lái)源。具體教學(xué)內(nèi)容如表2所示:

(3) 條件化創(chuàng)建Bean-使用@Conditional注解

這部分在前面案例的基礎(chǔ)上,完成案例“晴天坐公交車(chē)上班,雨天開(kāi)小汽車(chē)上班”。展示如何創(chuàng)建條件類(lèi),以及在配置類(lèi)和方法上使用@Conditional注解,在條件滿足時(shí)創(chuàng)建Bean。

(4) 使用@Profile注解

這部分在@Conditional注解案例的基礎(chǔ)上改造,使用@Profile注解來(lái)指示某個(gè)配置類(lèi)或者@Bean在哪些Profile下被激活,以及常用的激活Profile的方式。最后展示@Profile和ProfileCondition類(lèi)的源碼,讓學(xué)生理解@Profile是一種預(yù)制的Condition類(lèi)。

4.2 Spring Boot入門(mén)

這部分內(nèi)容介紹Spring Boot項(xiàng)目的基本代碼結(jié)構(gòu),常用注解和運(yùn)行方式。重點(diǎn)介紹了自動(dòng)化配置是如何實(shí)現(xiàn)的,并模擬Spring JDBC寫(xiě)一個(gè)包含自動(dòng)化配置的Starter,并將其作為依賴(lài)加入Spring Boot案例中使用。學(xué)習(xí)內(nèi)容和設(shè)計(jì)如下:

(1) Spring Boot入門(mén)

這是第一個(gè)Spring Boot例子,展示一個(gè)Spring MVC小案例,編寫(xiě)一個(gè)簡(jiǎn)單的控制器類(lèi),在頁(yè)面上展示一行文字。學(xué)生將體會(huì)到搭建和運(yùn)行一個(gè)基于Spring Boot的web應(yīng)用比之前SSM課程中學(xué)習(xí)的Spring MVC框架簡(jiǎn)單很多。除此之外還會(huì)介紹熱啟動(dòng)的配置方法,以及其他運(yùn)行Spring Boot應(yīng)用的方法。具體教學(xué)內(nèi)容如表3所示:

(2) Spring Boot的起步依賴(lài)和自動(dòng)配置

這部分為提供給學(xué)生的閱讀材料,包含使用spring-boot-starter-parent作為parent的作用。如何選擇和使用起步依賴(lài),如何覆蓋起步依賴(lài)引入的傳遞依賴(lài)的版本號(hào)。如何排除引入的依賴(lài),并加入其他依賴(lài)。最后分析第一個(gè)Spring MVC案例,如果使用傳統(tǒng)的XML配置方法,需要配置哪些Bean,而Spring Boot自動(dòng)化配置做了什么。

(3) Spring Boot核心注解和配置

這部分主要介紹Spring Boot中的基本注解和配置。將之前“通過(guò)Java方式注冊(cè)和裝配Bean”中的案例移植到Spring Boot框架中,和Spring MVC小案例整合在一起。還要學(xué)習(xí)在Spring Boot中使用針對(duì)profile的屬性文件。學(xué)習(xí)的主要內(nèi)容如表4所示:

(4) 自動(dòng)配置原理--寫(xiě)一個(gè)Starter

這部分模擬Spring JDBC中的DataSource,JdbcTemplate,并讓Spring Boot應(yīng)用啟動(dòng)時(shí)自動(dòng)創(chuàng)建Bean。模擬的兩個(gè)Bean創(chuàng)建條件如下:

①DataSource創(chuàng)建條件:當(dāng)容器中沒(méi)有DataSource Bean的時(shí)候創(chuàng)建,從屬性文件中獲得連接數(shù)據(jù)庫(kù)的4項(xiàng)屬性,設(shè)置到DataSource對(duì)象上。用戶必須從外部提供url的值,如果不提供url值,不能創(chuàng)建DataSource Bean。

②JdbcTemplate創(chuàng)建條件:當(dāng)容器中沒(méi)有JdbcTemplate Bean,并且容器中存在1個(gè)且只有1個(gè)DataSource Bean時(shí)創(chuàng)建。

在之前的Spring MVC小案例中加入自定義的starter依賴(lài),在application.properties文件中提供數(shù)據(jù)庫(kù)連接的4項(xiàng)屬性,測(cè)試和觀察兩個(gè)Bean的創(chuàng)建。此案例可以學(xué)習(xí)到Spring Boot如何加載自動(dòng)配置類(lèi),從中獲得Bean的信息,將要求的Bean建出來(lái)(在條件符合的前提下)。

4.3 Spring Boot和數(shù)據(jù)庫(kù)

這部分的學(xué)習(xí)目標(biāo)是學(xué)習(xí)Spring Boot為數(shù)據(jù)庫(kù)訪問(wèn)做了哪些自動(dòng)化的配置。學(xué)習(xí)如何通過(guò)屬性文件進(jìn)行數(shù)據(jù)庫(kù)相關(guān)的配置。最后學(xué)習(xí)Spring Boot整合Mybatis的方法。

(1) Spring Boot數(shù)據(jù)源配置

這部分將使用過(guò)去SSM課程中使用的轉(zhuǎn)賬案例代碼,但將XML方式的Bean配置改寫(xiě)成在配置類(lèi)中使用@Bean注解,通過(guò)方法返回datasource、JdbcTemplat和TransactionManager Bean。

案例測(cè)試成功后,再將其轉(zhuǎn)換成一個(gè)Spring Boot應(yīng)用,刪除之前的配置,在application.properties配置數(shù)據(jù)源的幾項(xiàng)屬性。從這個(gè)過(guò)程中學(xué)生即能學(xué)習(xí)到Spring Boot對(duì)數(shù)據(jù)庫(kù)訪問(wèn)進(jìn)行了哪些自動(dòng)配置。最后還要學(xué)習(xí)Spring Boot的默認(rèn)數(shù)據(jù)源,以及如何更換和配置其他數(shù)據(jù)源。

(2) Java方式配置下的Mybatis和Spring整合

這部分也使用過(guò)去SSM課程中使用過(guò)的轉(zhuǎn)賬案例代碼(基于Mybatis的),但也采用Java方式進(jìn)行配置。通過(guò)此過(guò)程了解Spring整合Mybatis的不同方法和其中涉及的Bean。了解全部整合過(guò)程后,對(duì)Spring Boot自動(dòng)化配置了Mybatis的哪些Bean就很清楚了。

(3) Spring Boot整合Mybatis

將前面的Mybatis案例移植到Spring Boot框架下,刪除基于Java的配置代碼,因?yàn)镾pring Boot將會(huì)把所需的Bean都建出來(lái)。最后介紹如何在application.properties中進(jìn)行Mybatis配置,例如配置別名、駝峰映射等。

4.4 Spring Boot和Web

這部分學(xué)習(xí)Spring Boot對(duì)MVC的支持。包含下面學(xué)習(xí)內(nèi)容。

(1) Java方式配置下的Spring MVC入門(mén)

案例是包含一個(gè)控制器類(lèi)和一個(gè)業(yè)務(wù)類(lèi)的Spring MVC應(yīng)用,使用兩種Java方式實(shí)現(xiàn)DispatcherServlet的配置。一種是實(shí)現(xiàn)WebApplicationInitializer接口,第二種是繼承AbstractAnnotationConfigDispatcherServletInitializer類(lèi)[5]。

(2) Java方式配置下的Spring MVC配置

為了支持對(duì)Spring MVC的配置,Spring提供了WebMvcConfigurer接口,只需要實(shí)現(xiàn)此接口,重寫(xiě)需要的方法就可以對(duì)Spring MVC進(jìn)行配置。這部分學(xué)習(xí)下面幾項(xiàng)配置:

①處理靜態(tài)資源,讓DispatcherServlet將對(duì)靜態(tài)資源的請(qǐng)求轉(zhuǎn)發(fā)到Servlet容器中默認(rèn)的Servlet上。

②使用Java方式注冊(cè)InternalResourceViewResolver Bean。

③靜態(tài)資源映射的配置,使用addResourceHandlers將實(shí)際的資源地址映射到一個(gè)對(duì)外暴露的虛擬路徑上。

④添加ViewController,在無(wú)業(yè)務(wù)邏輯的情況下,快速跳轉(zhuǎn)到視圖。

⑤攔截器配置。

(3) 自動(dòng)配置下的Spring MVC

將前面基于Java配置MVC的案例移植到Spring Boot框架下,學(xué)習(xí)Spring Boot為Spring MVC做了哪些自動(dòng)配置。主要包括Spring Boot開(kāi)啟了哪些靜態(tài)資源映射,如何配置歡迎頁(yè)面等。在application.properties文件中如何配置服務(wù)器端口號(hào)、contextPath、視圖相關(guān)配置。通過(guò)此過(guò)程學(xué)生會(huì)體會(huì)到,由于Spring Boot對(duì)MVC進(jìn)行了大量的自動(dòng)配置,包括DispatcherServlet等Bean都配置好了,所以開(kāi)發(fā)人員只需關(guān)注代碼本身的邏輯,額外的配置很少。

(4) 部署到本地Tomcat

上一步使用的是嵌入式的Tomcat來(lái)運(yùn)行web應(yīng)用,這部分學(xué)習(xí)如何將Spring Boot的Web應(yīng)用部署到本地Tomcat運(yùn)行。

4.5 整合案例開(kāi)發(fā)

在系統(tǒng)學(xué)習(xí)了Spring Boot框架之后,會(huì)讓學(xué)生開(kāi)發(fā)一個(gè)Spring Boot完整案例,案例包含商品展示和評(píng)論功能。讓學(xué)生體驗(yàn)Spring Boot應(yīng)用搭建和開(kāi)發(fā)的全過(guò)程。

5 結(jié)束語(yǔ)

有一種說(shuō)法“對(duì)Spring Boot的理解有多深,取決于對(duì)Spring框架有多了解”。學(xué)習(xí)Spring Boot之路甚至就是重學(xué)Spring之路,本課程的設(shè)計(jì)也遵循了這一理念。該課程已經(jīng)實(shí)施了兩年,從教學(xué)效果和學(xué)生反饋來(lái)看,由于配置的簡(jiǎn)化,業(yè)務(wù)實(shí)現(xiàn)代碼沒(méi)有大變化,學(xué)生覺(jué)得開(kāi)發(fā)本身的難度不大,但是理解自動(dòng)化配置的實(shí)現(xiàn)方式上有困難。特別是從XML方式的配置轉(zhuǎn)換到基于Java的配置,需要一個(gè)適應(yīng)過(guò)程。這門(mén)課以后還將繼續(xù)完善優(yōu)化,期待有更好的教學(xué)效果。

參考文獻(xiàn):

[1] 黑馬程序員.Java EE企業(yè)級(jí)應(yīng)用開(kāi)發(fā)教程Spring+Spring MVC+MyBatis[M].北京:人民郵電出版社,2017.

[2] 小馬哥.Spring Boot編程思想[M].北京:電子工業(yè)出版社,2019.

[3] 克雷格·沃斯.Spring Boot實(shí)戰(zhàn)[M].丁雪豐譯.北京:人民郵電出版社,2016.

[4] 汪云飛.Java EE開(kāi)發(fā)的顛覆者Spring Boot實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社,2016.

[5] Craig Walls.Spring實(shí)戰(zhàn)(第4版)[M].張衛(wèi)濱,譯.北京:人民郵電出版社,2016.

【通聯(lián)編輯:王力】

收稿日期:2021-12-23

作者簡(jiǎn)介:王崟(1981—),女,江蘇南京人,講師,碩士,主要研究方向?yàn)檐浖夹g(shù);陸莉莉(1978—) ,女,江蘇南通人,副教授,碩士,主要研究方向?yàn)榇髷?shù)據(jù)。

双柏县| 松桃| 上高县| 潮安县| 永安市| 金平| 微山县| 正定县| 青州市| 察隅县| 南京市| 雷州市| 海伦市| 宝丰县| 措美县| 调兵山市| 栖霞市| 仙游县| 怀宁县| 汽车| 渭南市| 汕尾市| 沈丘县| 渑池县| 莆田市| 天祝| 海丰县| 平阳县| 通道| 伊川县| 榆中县| 邳州市| 双桥区| 娱乐| 曲阜市| 碌曲县| 分宜县| 长宁县| 贵州省| 丹凤县| 江油市|