




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
JavaEE輕量級框架應用實戰——SSM框架(SpringMVC+Spring+MyBatis)(第2版)第8章SpringAOP學習單元第8章SpringAOP課時6課時學習目標 了解AOP的概念和作用 理解AOP術語 熟悉Spring中兩種動態代理方式的區別 掌握基于代理類的AOP實現 掌握基于XML的聲明式AspectJ和基于注解的聲明式AspectJ學習內容知識點了解熟悉掌握重點難點SpringAOP概述√SpringAOP術語√JDK動態代理√√CGLib動態代理√√基于XML的AOP實現√√基于注解的AOP實現√√第19次課
課題SpringAOP(1)課時2課時(90min)教學目標知識目標:(1)了解SpringAOP的概念和常用術語(2)SpringAOP的實現機制(3)掌握SpringAOP基于XML和注解的實現方法能力目標:能使用基于XML和注解的方法實現SpringAOP素質目標:通過學習SpringAOP切面的抽取,培養提取有效信息的能力,提高總結歸納的能力教學重難點教學重點:SpringAOP的概念,SpringAOP的相關術語,SpringAOP的實現機制,基于XML的AOP實現,基于注解的AOP實現教學難點:SpringAOP的實現方法教學方法問答法、討論法、講授法教學用具電腦、投影儀、多媒體課件、教材教學過程主要教學內容及步驟課前任務【教師】布置課前任務,和學生負責人取得聯系,讓其提醒同學通過超星學習通APP或其他學習軟件,完成課前任務請同學們上網查找AOP、OOP的具體含義及二者的區別。【學生】完成課前任務考勤【教師】使用超星學習通APP進行簽到【學生】班干部報請假人員及原因問題導入【教師】提出以下問題:同學們都知道Java是面向對象編程,AOP為面向切面編程,那么什么是切面?【學生】思考、舉手回答傳授新知【教師】講解SpringAOP概念、AOP相關術語,SpringAOP的實現方法一、SpringAOP概述?【教師】講解SpringAOP概念,AOP相關術語:切面、連接點、切入點、通知、目標對象、代理對象和織入(一)SpringAOP的概念在應用程序的業務處理中,通常會進行日志記錄、權限驗證、事務控制等操作。雖然使用OOP可以將程序模塊化,但要實現某些功能,重復的代碼仍然會分散到各個方法中。如果想要修改某個功能,就必須修改所有的相關方法。這樣不僅增加了開發人員的工作量,而且會增加代碼的出錯率。AOP為此問題提供了解決方案,它采取橫向抽取機制,將分散在各個方法中的重復代碼抽取出來,然后將抽取的代碼在需要的地方執行。如果將抽取的重復代碼看作一個切面,那么AOP就是使用切面將原有的執行程序在中間切開,加入切面的操作。AOP切面模擬如圖所示。在圖中,將方法中重復的代碼橫向抽取生成一個或多個切面,然后將切面的功能動態添加到業務邏輯中,從而實現業務邏輯和系統服務之間的分離?!菊n堂問答】?【教師】隨機邀請學生回答以下問題請同學們總結歸納,SpringAOP如何通過切面實現業務邏輯和系統服務之間的分離。?【學生】聆聽、思考、回答?【教師】總結學生的回答(二)SpringAOP的術語1.切面(Aspect)切面是指類中重復的代碼形成的類,通常是指封裝的、用于橫向切入的功能類,如日志記錄、事務管理等。2.連接點(Joinpoint)連接點是指程序執行過程中某個具體的執行點,如調用某個方法或處理異常時。在SpringAOP中,一個連接點通常是一個方法的執行。3.切入點(Pointcut)切入點是指切面與程序流程的交叉點,即需要處理的連接點。當某個連接點滿足預先指定的條件時,AOP就能夠定位到這個連接點,然后在連接點處插入切面,該連接點就變成了切入點。4.通知(Advice)通知也稱增強處理,是指在切入點要執行的增強處理程序,它是切面的具體實現,如圖4-1中的權限驗證、前置日志和后置日志。通知根據執行位置的不同,可分為5種不同的類型,切面中的方法具體屬于哪類通知,需要在配置文件中指定。5種通知分別如下。(1)前置通知:在切入點前執行的通知,通常應用于權限檢查等。(2)后置通知:在切入點后執行的通知,通常應用于關閉流、上傳文件或刪除臨時文件等。(3)環繞通知:在切入點前后執行的通知,通常應用于日志、事務控制等。(4)返回通知:在切入點正常返回后執行的通知,通常應用于資源釋放等。(5)異常通知:在切入點拋出異常后執行的通知,通常應用于異常處理日志等?!菊n堂問答】?【教師】隨機邀請學生回答以下問題請同學們結合SpringAOP5種不同的通知類型歸納總結,SpringAOP通知的執行順序。?【學生】聆聽、思考、回答?【教師】總結學生的回答在Spring5中,執行通知的默認順序如下。(1)當程序執行正常時,執行順序為,環繞通知前→前置通知→目標方法→返回通知→后置通知→環繞通知后。(2)當程序執行異常時,執行順序為,環繞通知前→前置通知→目標方法→異常通知→后置通知→異常日志。5.目標對象(Target)目標對象是指被一個或多個切面通知的對象,也稱通知對象。6.代理對象(Proxy)代理對象是指將通知應用到目標對象后,程序動態創建的對象。7.織入(Weaving)織入是指將切面代碼插入目標對象中,從而生成代理對象的過程。二、SpringAOP的實現方法?【教師】介紹SpringAOP的實現機制SpringAOP實現時會為目標對象生成一個動態代理對象,并在代理對象中實現對目標對象的增強。根據代理對象的創建方式,SpringAOP的實現機制分為JDK動態代理和CGLib動態代理。1.JDK動態代理SpringAOP默認使用JDK動態代理,它通過java.lang.reflect.Proxy類實現,可以調用Proxy類的newProxyInstance()方法動態創建代理對象。JDK動態代理實現非侵入式的代碼擴展,可以在不修改源代碼的情況下增強某些方法。2.CGLib動態代理JDK動態代理只能為接口創建代理對象,當需要為類創建代理對象時,就需要使用CGLib動態代理。它不要求目標對象有實現接口,而是通過繼承的方式動態創建代理對象?!菊n堂問答】?【教師】隨機邀請學生回答以下問題請同學們思考,在實際開發中,SpringAOP根據什么來選擇實現動態代理的方式??【學生】聆聽、思考、回答?【教師】總結學生的回答在實際開發中,如果使用接口實現目標對象,AOP會使用JDK實現動態代理;如果直接使用類實現目標對象,則AOP會使用CGLib實現動態代理。基于上述兩種實現機制,SpringAOP的實現方式有兩種,即動態代理方式和使用AspectJ框架的方式。AspectJ是一個基于Java的AOP框架,它提供了強大的AOP功能。Spring2.0以后,SpringAOP引入了對AspectJ的支持,并允許直接使用AspectJ進行編程。本節重點講解使用AspectJ框架的方式實現SpringAOP的方法。使用AspectJ實現SpringAOP的方法有兩種:基于XML的AOP實現和基于注解的AOP實現。課堂討論【教師】對學生進行分組,4~6人一組,每組選出一名組長,然后組織學生以小組為單位討論以下問題請同學們根據本次課講解的基于XML的AOP實現和基于注解的AOP實現,對比分析兩種方式的實現步驟?!緦W生】聆聽、思考、小組討論,由小組代表上臺發表討論結果【教師】總結學生的回答,并評價各組的表現課堂小結【教師】簡要總結本節課的要點本次課介紹了SpringAOP的概念,闡述了SpringAOP的相關術語,包括切面、連接點、切入點、通知、目標對象、代理對象和織入等。講解了SpringAOP的實現機制,分為JDK動態代理和CGLib動態代理。最后講解了基于XML的AOP實現,基于注解的AOP實現,并通過實際的例程介紹了詳細的實現步驟,包括各部分具體的代碼實現,及代碼功能?!緦W生】總結回顧知識點作業布置【教師】布置課后作業請根據本課內容,完成課后習題中的相關習題?!緦W生】完成課后任務教學反思第20次課
課題SpringAOP(2)課時2課時(90min)教學目標知識目標:(1)了解SpringAOP的概念和常用術語(2)SpringAOP的實現機制(3)掌握SpringAOP基于XML和注解的實現方法能力目標:能使用基于XML和注解的方法實現SpringAOP素質目標:通過學習SpringAOP切面的抽取,培養提取有效信息的能力,提高總結歸納的能力教學重難點教學重點:SpringAOP的概念,SpringAOP的相關術語,SpringAOP的實現機制,基于XML的AOP實現,基于注解的AOP實現教學難點:SpringAOP的實現方法教學方法問答法、討論法、講授法教學用具電腦、投影儀、多媒體課件、教材教學過程主要教學內容及步驟課前任務【教師】布置課前任務,和學生負責人取得聯系,讓其提醒同學通過超星學習通APP或其他學習軟件,完成課前任務請同學們上網查找AOP、OOP的具體含義及二者的區別?!緦W生】完成課前任務考勤【教師】使用超星學習通APP進行簽到【學生】班干部報請假人員及原因問題導入【教師】提出以下問題:同學們都知道Java是面向對象編程,AOP為面向切面編程,那么什么是切面?【學生】思考、舉手回答傳授新知【教師】講解SpringAOP的實現方法?【教師】介紹SpringAOP的實現機制,基于XML和注解的AOP實現一、SpringAOP的實現機制SpringAOP實現時會為目標對象生成一個動態代理對象,并在代理對象中實現對目標對象的增強。根據代理對象的創建方式,SpringAOP的實現機制分為JDK動態代理和CGLib動態代理。1.JDK動態代理SpringAOP默認使用JDK動態代理,它通過java.lang.reflect.Proxy類實現,可以調用Proxy類的newProxyInstance()方法動態創建代理對象。JDK動態代理實現非侵入式的代碼擴展,可以在不修改源代碼的情況下增強某些方法。2.CGLib動態代理JDK動態代理只能為接口創建代理對象,當需要為類創建代理對象時,就需要使用CGLib動態代理。它不要求目標對象有實現接口,而是通過繼承的方式動態創建代理對象。【課堂問答】?【教師】隨機邀請學生回答以下問題請同學們思考,在實際開發中,SpringAOP根據什么來選擇實現動態代理的方式??【學生】聆聽、思考、回答?【教師】總結學生的回答在實際開發中,如果使用接口實現目標對象,AOP會使用JDK實現動態代理;如果直接使用類實現目標對象,則AOP會使用CGLib實現動態代理?;谏鲜鰞煞N實現機制,SpringAOP的實現方式有兩種,即動態代理方式和使用AspectJ框架的方式。AspectJ是一個基于Java的AOP框架,它提供了強大的AOP功能。Spring2.0以后,SpringAOP引入了對AspectJ的支持,并允許直接使用AspectJ進行編程。本節重點講解使用AspectJ框架的方式實現SpringAOP的方法。使用AspectJ實現SpringAOP的方法有兩種:基于XML的AOP實現和基于注解的AOP實現。二、基于XML的AOP實現?【教師】多媒體觀看視頻“基于XML的AOP實現”,讓學生了解在XML文件中配置AOP的元素,以及基于XML實現的AOP案例基于XML文件實現AOP時,主要是在Spring的XML配置文件中使用<aop:config>元素及其子元素對所有切面、切入點和通知等進行配置。<aop:config>元素的子元素如表4-1所示。下面對表中的子元素進行詳細講解。1.配置切面在Spring的配置文件中,切面通常是通過<aop:aspect>元素來配置的,該元素會將一個已定義好的SpringBean設置為切面Bean。因此,在使用<aop:aspect>元素前,首先要定義一個普通的Bean,然后通過<aop:aspect>的ref屬性引用該Bean。<aop:aspect>元素還可以通過id屬性指定該切面的唯一標識。2.配置切入點在Spring的配置文件中,切入點是通過<aop:pointcut>元素來配置的。當<aop:pointcut>元素作為<aop:config>元素的子元素時,表示該切入點是全局切入點,可被多個切面共享;當它作為<aop:aspect>元素的子元素時,表示該切入點只對當前切面有效。<aop:pointcut>元素通常會指定id和expression屬性。其中,id屬性用于指定切入點的唯一標識;expression屬性用于指定切入點表達式,表示在匹配該表達式的連接點時織入通知,其基本格式如下execution(modifiers-pattern?ret-type-patterndeclaring-type-pattern?name-pattern(param-pattern)throws-pattern?)(1)modifiers-pattern:目標方法的訪問修飾符,如public、private等。(2)ret-type-pattern:目標方法的返回值類型,如void、String等。(3)declaring-type-pattern:目標方法的聲明類,如“com.spring.aop.jdk.User”等。(4)name-pattern:目標方法的名稱,如update()。(5)param-pattern:目標方法的參數類型,如String、Double等。(6)throws-pattern:目標方法拋出的異常類型。其中,帶“?”的參數表示可配置項,其他部分則是必須配置項。此外,在切入點表達式中,可使用“..”表示所有,如所有類、所有參數等,還可使用“*”表示任何類型。下面列舉幾種表達式及其說明,如表所示。?提示切入點表達式可以與||、&&或!運算符組合,如!execution(*com.spring.aop.jdk..addUser(..))表示執行com.spring.aop.jdk包中所有類的任何類型的除addUser()方法之外的所有方法。3.配置通知在Spring的配置文件中,通知是通過<aop:config>元素的5個子元素來配置的,5種通知的配置順序決定通知的執行順序。配置通知子元素的常用屬性如表所示。【例題】?【教師】出示【示例】,組織學生答題基于XML實現SpringAOP。?【學生】聆聽、思考、答題?【教師】解析例題【分析】首先創建Product接口,并創建ProductImpl類(目標對象)實現接口;然后創建ProductAspect切面類,在類中定義前置通知、后置通知、環繞通知、異常通知和返回通知;接著創建aopXml.xml配置文件,在文件中定義ProductImpl類和ProductAspect類的Bean,并配置切面、切入點和通知;最后創建AopXmlTest類,在類中獲取ProductImpl類的Bean,并通過Bean調用目標方法。此外,使用AspectJ實現AOP需要引入AspectJ包aspectj-xxx.jar和AspectJWeaver包aspectjweaver-xxx.jar?!緦嵤浚?)通過https://www.IntelliJIDEA.org/aspectj/downloads.php下載aspectj-1.9.6.jar,通過/artifact/org.aspectj/aspectjweaver/下載aspectjweaver-.jar,然后將這兩個包復制到spring項目的lib文件夾中,并添加至構建路徑。(2)在spring項目下創建com.spring.aop.xml包,在包中創建Product接口,并在接口中定義insert()和delete()目標方法。……實現代碼詳見教材(3)在com.spring.aop.xml包中創建ProductImpl類實現Product接口,在類中重寫insert()和delete()方法。其中,insert()方法實現輸出添加信息提示;delete()方法實現輸出刪除信息提示,并使用throw語句拋出異常。……實現代碼詳見教材(4)在com.spring.aop.xml包中創建ProductAspect類,并在類中定義前置通知adviseBefore()、后置通知adviseAfter()、環繞通知adviseAround()、異常通知adviseThrow()和返回通知adviseReturn(),分別實現輸出相應的提示。通知使用JoinPoint接口及其ProceedingJoinPoint子接口作為參數獲取目標對象的類名、方法名和參數等。其中,環繞通知必須接收一個ProceedingJoinPoint類型的參數,返回值類型為Object,且必須拋出異常;異常通知可使用Throwable類型的參數來獲取異常信息?!瓕崿F代碼詳見教材(5)在spring項目的resources源文件夾中創建aopXml.xml配置文件。在文件中引入aop的命名空間,然后定義ProductImpl類和ProductAspect類的Bean實例product和productAspect,并使用相應的元素配置AOP、切面、切入點和通知?!瓕崿F代碼詳見教材(6)在com.spring.aop.xml包中創建AopXmlTest類。在類的main()方法中加載aopXml.xml配置文件,然后獲取Bean實例product,最后通過product調用目標方法?!瓕崿F代碼詳見教材(7)執行AopXmlTest類,程序運行結果如圖所示。【程序說明】從圖可以看出,通知的執行順序與Spring5默認的執行順序不同,而與配置文件中通知的配置順序相同。?提示JoinPoint接口及其ProceedingJoinPoint子接口可以通過其方法獲取目標對象的信息,常用的方法如下。(1)getTarget():獲取目標對象,通過其getClass().getName()方法獲取目標對象所屬類名。(2)getSignature():獲取封裝了署名信息的對象,通過其getName()方法獲取目標方法名稱。(3)getArgs():獲取目標方法的實參列表,通過其get(inti)方法獲取第i個參數的值。三、基于注解的AOP實現?【教師】多媒體觀看視頻“基于注解的AOP實現”,讓學生了解Spring實現AOP的注解,以及基于注解實現的AOP案例為簡化AOP的配置,可以使用注解實現AOP,此時通知按照默認的順序執行。Spring提供了一系列注解,如表所示?!菊n堂問答】?【教師】隨機邀請學生回答以下問題請同學們羅列,通過注解實現AOP,Spring有哪些注解供用戶使用??【學生】聆聽、思考、回答?【教師】總結學生的回答【例題】?【教師】出示【示例】,組織學生答題使用注解實現示例。?【學生】聆聽、思考、答題?【教師】解析例題【分析】使用@Component注解標注ProductImpl類,使用@Component和@Aspect注解標注ProductAspect類。在ProductAspect類中,定義一個方法命名切入點,并使用@Pointcut注解將其標注為切入點,同時指定切入點表達式;然后定義4個方法,并使用@Before、@After、@Around、@AfterThrowing和@AfterReturning注解將其標注為相應的通知,同時指定切入點。【解】(1)在spring項目下創建com.spring.aop.annotation包,并在包中創建Product接口。……實現代碼詳見教材(2)在com.spring.aop.annotation包中創建ProductImpl類實現Product接口,在類定義前使用@Component將類標注為Bean。……實現代碼詳見教材(3)在com.spring.aop.annotation包中創建ProductAspect類,在類定義前使用@Aspect注解將其標注為切面類,使用@Component注解將其標注為Bean。在類中,定義返回值為void、方法體為空的pointcut()方法命名切入點,并使用@Pointcut注解將其標注為切入點,同時指定切入點表達式;使用@Before、@After、@Around、@AfterThrowing和@AfterReturning注解分別標注adviseBefore()、adviseAfter()、adviseAround()、adviseThrow()和adviseReturn()方法,注解的value屬性值都為pointcut()。其中,@AfterThrowing注解還須設置throwing屬性?!瓕崿F代碼詳見教材(4)在spring項目的resources源文件夾中創建aopAnnotation.xml配置文件,在文件中還使用<aop:aspectj-autoproxy>元素開啟AOP自動配置功能。……實現代碼詳見教材(5)在com.spring.aop.annotation包中創建AopAnnotationTest類?!瓕崿F代碼詳見教材(6)執行AopAnnotationTest類,程序運行結果如圖所示?!境绦蛘f明】從圖可以看出,通知的執行順序與Spring5默認的執行順序相同?!緦W生】聆聽、思考、理解、記錄課堂討論【教師】對學生進行分組,4~6人一組,每組選出一名組長,然后組織學生以小組為單位討論以下問題請同學們根據本次課講解的基于XML的AOP實現和基于注解的AOP實現,對比分析兩種方式的實現步驟?!緦W生】聆聽、思考、小組討論,由小組代表上臺發表討論結果【教師】總結學生的回答,并評價各組的表現課堂小結【教師】簡要總結本節課的要點本次課介紹了SpringAOP的概念,闡述了SpringAOP的相關術語,包括切面、連接點、切入點、通知、目標對象、代理對象和織入等。講解了SpringAOP的實現機制,分為JDK動態代理和CGLib動態代理。最后講解了基于XML的AOP實現,基于注解的AOP實現,并通過實際的例程介紹了詳細的實現步驟,包括各部分具體的代碼實現,及代碼功能。【學生】總結回顧知識點作業布置【教師】布置課后作業請根據本課內容,完成課后習題中的相關習題。【學生】完成課后任務教學反思第21次課
課題SpringAOP(3)課時2課時(90min)教學目標知識目標:(1)掌握基于注解的AOP實現(2)掌握用戶管理接口及其實現類、學生信息管理接口及其實現類、切面類、配置文件、執行類等的創建和配置方法能力目標:能通過SpringAOP來實現學生管理系統素質目標:養成堅持不懈、刻苦鉆研的學習作風,樹立追求卓越、勇于拼搏的奮斗精神,培育執著專注、踏實認真的職業素質教學重難點教學重點:基于注解的AOP實現,相關接口及其實現類的編寫,創建配置文件教學難點:基于注解的AOP實現教學方法問答法、討論法、講授法、演示法、任務驅動法教學用具電腦、投影儀、多媒體課件、教材教學過程主要教學內容及步驟課前任務【教師】布置課前任務,和學生負責人取得聯系,讓其提醒同學通過超星學習通APP或其他學習軟件,完成課前任務請同學們根據本校或者查找市場上已有的學生管理系統,看其具有哪些功能?!緦W生】完成課前任務考勤【教師】使用超星學習通APP進行簽到【學生】班干部報請假人員及原因問題導入【教師】提出以下問題:本章同學們學習了SpringAOP,那么如何通過SpringAOP來實現學生管理系統?【學生】思考、舉手回答傳授新知【教師】講解綜合案例——學生管理系統的AOP,包括:案例內容、案例分析、案例實施一、案例內容?【教師】講解學生管理系統的概念,功能設計【課堂問答】?【教師】隨機邀請學生回答以下問題請同學們思考,如果讓大家設計一套學生管理系統,需要具備哪些基本功能??【學生】聆聽、思考、回答?【教師】總結學生的回答學生管理系統一般包括用戶模塊、學生信息模塊和學生成績模塊。其中,用戶模塊則實現學生、教師登錄和退出功能;學生信息和學生成績模塊實現添加、更新、查詢信息和成績功能。由于學生只能查詢本人的信息和成績,所以每次執行操作前需要進行權限驗證。而且每次操作都需要記錄,以便系統后續的管理和維護。本案例將通過SpringAOP來實現學生管理系統。二、案例分析?【教師】介紹實現學生管理系統需要創建的各個接口及類【課堂問答】?【教師】隨機邀請學生回答以下問題請同學們思考,實現上述學生管理系統,在代碼中需要創建哪些接口,創建哪些類??【學生】聆聽、思考、回答?【教師】總結學生的回答(1)使用基于注解的AOP實現學生管理系統。(2)創建用戶管理接口及其實現類,在接口中定義登錄和退出登錄方法;在類中定義賬號、密碼和身份靜態屬性,以及獲取賬號和身份方法,然后重寫登錄和退出登錄方法。(3)創建學生信息管理接口及其實現類,并接口中定義方法,以及在類中重寫方法,實現添加、更新和查詢學生信息功能。(4)創建學生成績成績接口及其實現類,并接口中定義方法,以及在類中重寫方法,實現添加、更新和查詢學生成績功能。(5)創建切面類,在類中定義方法獲取當前時間、前置通知實現權限驗證、環繞通知實現記錄操作、異常通知實現記錄異常信息。其中,權限驗證通過用戶賬號和身份判斷學生是否能執行當前操作,如果能則執行當前操作,否則拋出異常,中斷程序。(6)創建配置文件,在文件中指定掃描的包,并開啟Bean的自動掃描功能和AOP自動配置功能。(7)創建執行類,在類中獲取用戶管理類、學生信息管理類和學生成績管理類的Bean,然后通過Bean調用相關方法,實現登錄和退出系統、查詢學生信息和成績功能。三、案例實施?【教師】講解各個接口和類的具體代碼實現,并進行演示(1)在spring項目下創建com.spring.student.system包,在包中創建用戶管理接口UserManage,并在在接口中定義login()和quit()方法。實現代碼如下。packagecom.spring.student.system;publicinterfaceUserManage{ publicvoidlogin(Stringnumber,Stringpassword,Stringidentity); publicvoidquit();}(2)在com.spring.student.system包中創建UserManage接口的實現類UserManageImpl,并在類定義前使用@Component注解將其標注為Bean。在類中,定義賬號(number)、密碼(password)和身份(identity)靜態屬性,然后定義getXxx()方法獲取賬號和身份信息,接著重寫login()方法實現驗證用戶登錄信息,如果正確則輸出登錄成功提示并賦值給屬性,否則拋出異常,以及重寫quit()方法實現輸出退出登錄提示。實現代碼如下。packagecom.spring.student.system;importorg.springframework.stereotype.Component;@Component("userManage")publicclassUserManageImplimplementsUserManage{ staticStringnumber; staticStringpassword; staticStringidentity; publicStringgetNumber(){ returnUserManageImpl.number; } publicStringgetIdentity(){ returnUserManageImpl.identity; } @Override publicvoidlogin(Stringnumber,Stringpassword,Stringidentity){ if("20220102001".equals(number)&&"123456".equals(password) &&"學生".equals(identity)){ System.out.println(number+"用戶登錄成功"); UserManageImpl.number=number; UserManageImpl.password=password; UserManageImpl.identity=identity; } else thrownewRuntimeException("賬號或密碼錯誤"); } @Override publicvoidquit(){ System.out.println("用戶退出登錄"); }}(3)在com.spring.student.system包中創建學生信息管理接口StudentManage,并在類中定義addStudent()、updateStudent()和queryStudent()方法。實現代碼如下。packagecom.spring.student.system;publicinterfaceStudentManage{ publicvoidaddStudent(); publicvoidupdateStudent(Stringnumber); publicvoidqueryStudent(Stringnumber);}(4)在com.spring.student.system包中創建StudentManage接口的實現類StudentManageImpl,并在類定義前使用@Component注解將其標注為Bean。在類中,重寫addStudent()、updateStudent()和queryStudent()方法,分別實現輸出添加、根據賬號更新或查詢學生信息提示。實現代碼如下。packagecom.spring.student.system;importorg.springframework.stereotype.Component;@Component("studentManage")publicclassStudentManageImplimplementsStudentManage{ @Override publicvoidaddStudent(){ System.out.println("添加學生信息"); } @Override publicvoidupdateStudent(Stringnumber){ System.out.println("更新該學生信息:"+number); } @Override publicvoidqueryStudent(Stringnumber){ System.out.println("查詢該學生信息:"+number); }}(5)在com.spring.student.system包中創建學生成績管理接口ScoreManage,并在接口中并定義addScore()、updateScore()和queryScore()方法。實現代碼如下。packagecom.spring.student.system;publicinterfaceScoreManage{ publicvoidaddScore(); publicvoidupdateScore(Stringnumber); publicvoidqueryScore(Stringnumber);}(6)在com.spring.student.system包中創建ScoreManage接口的實現類ScoreManageImpl,并在類定義前使用@Component注解將其標注為Bean。在類中,重寫addScore()、updateScore()和queryScore()方法,分別實現輸出添加、根據賬號更新或查詢學生成績提示。實現代碼如下。packagecom.spring.student.system;importorg.springframework.stereotype.Component;@Component("scoreManage")publicclassScoreManageImplimplementsScoreManage{ @Override publicvoidaddScore(){ System.out.println("添加學生成績"); } @Override publicvoidupdateScore(Stringnumber){ System.out.println("更新該學生成績:"+number); } @Override publicvoidqueryScore(Stringnumber){ System.out.println("查詢該學生成績:"+number); }}(7)在com.spring.student.system包中創建切面類SystemAspect,并在類定義前使用@Aspect注解將其標注為切面類,以及使用@Component注解將其標注為Bean。在類中,執行以下操作。【課堂問答】?【教師】隨機邀請學生回答以下問題請同學們根據上節課SpringAOP通知的執行順序,思考在代碼中如何實現這些通知??【學生】聆聽、思考、回答?【教師】總結學生的回答①創建UserManageImpl類對象userManage。②定義getTime()方法獲取當前時間。③定義pointcut()方法并使用@Pointcut注解將其標注為切入點,同時指定切入點表達式。④定義adviseBefore1()和adviseBefore2()方法,并使用@Before注解將其標注為前置通知。其中,adviseBefore1()方法實現驗證用戶身份,限制學生添加和更新信息和成績;adviseBefore2()方法實現驗證用戶賬號和身份,限制學生查詢其他學生的信息和成績。⑤定義adviseAround()方法,并使用@Around注解將其標注為環繞通知,實現用戶執行操作前后記錄。⑥定義adviseThrow()方法,并使用@AfterThrowing注解將其標注為異常通知,實現執行操作的異常信息記錄。實現代碼如下?!瑻Aspect //將SystemAspect類標注為切面類@Component //將SystemAspect類標注為BeanpublicclassSystemAspect{ //創建UserManageImpl類對象userManage UserManageImpluserManage=newUserManageImpl(); publicStringgetTime(){ //定義方法獲取當前時間 Datedate=newDate(); //創建日期對象date //創建日期格式 DateFormatdf=newSimpleDateFormat("yyyy-MM-ddhh時mm分ss秒"); returndf.format(date); } @Pointcut("execution(*com.spring.student.system..*(..))") publicvoidpointcut(){} //定義方法命名切入點 //定義方法并標注為前置通知,驗證用戶身份,限制學生添加和更新信息和成績 @Before(value="execution(*com.spring.student.system..add*(..))" +"||execution(*com.spring.student.system..update*(..))") publicvoidadviseBefore1(JoinPointjionPoint){ StringmethodName=jionPoint.getSignature().getName(); List<Object>args=Arrays.asList(jionPoint.getArgs()); if(userManage.getIdentity()=="學生"){ thrownewRuntimeException(userManage.getNumber() +"用戶無權限對"+args.get(0)+"進行"+methodName+"操作"); } } //定義方法并標注為前置通知,驗證用戶賬號和身份,限制學生查詢其他學生的信息和成績 @Before(value="execution(*com.spring.student.system..query*(..))") publicvoidadviseBefore2(JoinPointjionPoint){ StringmethodName=jionPoint.getSignature().getName(); List<Object>args=Arrays.asList(jionPoint.getArgs()); if(userManage.getNumber()!=args.get(0)&&userManage.getIdentity()=="學生"){ thrownewRuntimeException(userManage.getNumber() +"用戶無權限對"+args.get(0)+"進行"+methodName+"操作"); } } //定義方法并標注為環繞通知 @Around("pointcut()") publicObjectadviseAround(ProceedingJoinPointproceedingJoinPoint)throwsThrowable{ System.out.println(getTime()); System.out.println(userManage.getNumber()+"用戶執行" +proceedingJoinPoint.getSignature().getName()+"操作"); Objectobject=proceedingJoinPceed(); System.out.println(userManage.getNumber()+"用戶完成" +proceedingJoinPoint.getSignature().getName()+"操作"); returnobject; } //定義方法并標注為異常通知 @AfterThrowing(value="pointcut()",throwing="e") publicvoidadviseThrow(JoinPointjionPoint,RuntimeExceptione){ System.out.println("記錄執行"+jionPoint.getSignature().getName()+"異常信息"); }}(8)在spring項目的resources源文件夾中創建配置文件student_system.xml,在文件中指定掃描的包,并開啟自動掃描功能,以及開啟AOP自動配置功能。實現代碼如下。<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans" xmlns:xsi="/2001/XMLSchema-instance" xmlns:context="/schema/context" xmlns:aop="/schema/aop" xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd /schema/context /schema/context/spring-context.xsd /schema/aop /schema/aop/spring-aop.xsd"> <!--指定掃描的包,并開啟自動掃描功能--> <context:component-scanbase-package="com.spring.student.system"/> <!--開啟AOP自動配置功能--> <aop:aspectj-autoproxy/></beans>(9)在com.spring.student.system包中創建執行類StudentSystem。在類的main()方法中,加載student_system.xml配置文件,然后分別獲取Bean實例userManage、studentManage和scoreManage,最后使用try-catch-finally語句捕獲異常信息。其中,在try子語句中通過userManage、studentManage和scoreManage分別調用login()、queryStudent()和updateScore()方法,在finally子語句中通過userManage調用quit()方法。實現代碼如下?!璸ublicclassStudentSystem{ publicstaticvoidmain(String[]args){ //加載student_system.xml配置文件 ApplicationContextcontext; context=newClassPathXmlApplicationContext("student_system.xml"); //獲取Bean實例 UserManageuserManage=(UserManage)context.getBean("userManage"); StudentManagestudentManage=(StudentManage)context.getBean("studentManage"); ScoreManagescoreManage=(ScoreManage)context.getBean("scoreManage"); //捕獲異常,并輸出異常信息 try{ //通過userManage調用login()方法 userManage.login("20220102001","123456","學生"); //通過studentManage調用queryStudent()方法 studentManage.queryStudent("20220102001"); //通過scoreManage調用updateScore()方法 scoreManage.updateScore("20220102001"); }catch(RuntimeExceptione){ System.out.println("異常信息:"+e.getMessage()); }finally{ //通過userManage調用quit()方法 userManage.quit(); } //關閉容器 ((AbstractApplicationContext)context).close(); }}(10)執行StudentSystem類,程序運行結果如圖4-4所示?!緦W生】聆聽、思考、理解、記錄課堂實訓【教師】介紹課堂實訓內容,要求學生按照實訓要求完成實訓任務基于綜合案例,使用XML配置方法實現學生管理系統的AOP?!緦W生】按照要求進行操作,完成后總結自己哪些地方做得很好,還有哪些地方需要改進課堂小結【教師】簡要總結本節課的要點本次課介紹了學生管理系統的概念,功能上的設計。分析了實現學生管理系統需要創建的各個接口及類,包括用戶管理接口及其實現類、學生信息管理接口及其實現類、學生成績成績接口及其實現類、切面類、執行類等。講解了各個接口和類的具體代碼實現?!緦W生】總結回顧知識點作業布置【教師】布置課后作業請根據本課內容,完成課后習題中的相關習題。【學生】完成課后任務教學反思第9章Spring的數據庫開發及事務管理學習單元第9章Spring的數據庫開發及事務管理課時6課時學習目標 了解JDBC模塊的作用 熟悉SpringJDBC的配置 掌握JdbcTemplate類常用方法的使用 熟悉Spring事務管理的3個核心接口 了解Spring事務管理的兩種方式 掌握基于XML和基于注解的聲明式事務的使用學習內容知識點了解熟悉掌握重點難點JdbcTemplate概述√SpringJDBC的配置√excute()方法√√update()方法√√query()方法√√事務管理的核心接口√事務管理的方式√基于XML方式的聲明式事務√√√基于注解方式的聲明式事務√√第22次課
課題Spring數據庫編程(1)課時2課時(90min)教學目標知識目標:(1)了解SpringJDBC的優勢(2)掌握SpringJDBC的配置(3)掌握JdbcTemplate類的常用方法能力目標:能使用JdbcTemplate類的常用方法實現數據庫的訪問和操作素質目標:我們的很多個人信息猶如數據庫中的數據,培養同學們要有數據安全意識,要有數據保護意識教學重難點教學重點:SpringJDBC的優勢,SpringJDBC的配置,JdbcTemplate類簡介,JdbcTemplate類的常用方法教學難點:JdbcTemplate類的常用方法教學方法問答法、討論法、講授法、任務驅動法教學用具電腦、投影儀、多媒體課件、教材教學過程主要教學內容及步驟課前任務【教師】布置課前任務,和學生負責人取得聯系,讓其提醒同學通過超星學習通APP或其他學習軟件,完成課前任務請同學們查找之前Java教材,或上網查找Java中JDBC的用法?!緦W生】完成課前任務考勤【教師】使用超星學習通APP進行簽到【學生】班干部報請假人員及原因問題導入【教師】提出以下問題:我們在學習Java的時候連接數據庫用到了JDBC,應用程序必須自己管理數據庫資源,那么在Spring當中是否有更便利的方式呢?【學生】思考、舉手回答傳授新知【教師】講解SpringJDBC的優勢,SpringJDBC的配置,JdbcTemplate類簡介,JdbcTemplate類的常用方法一、SpringJDBC概述?【教師】講解SpringJDBC所具有的優勢,SpringJDBC的配置方法(一)SpringJDBC的優勢Java數據庫連接(Javadatabaseconnectivity,JDBC)能夠滿足大部分用戶對數據庫最基本的需求,但在使用JDBC時,應用程序必須自己管理數據庫資源。而Spring對數據庫操作需求提供了很好的支持,并在傳統JDBC的基礎上,構建了一個抽象層,提供了許多使用JDBC的模板和驅動模塊,為Spring應用程序操作關系數據庫提供了更大的便利。Spring的JDBC模塊對JDBCAPI進行了封裝,降低了JDBCAPI的使用難度,使得處理JDBC的代碼更加簡潔。Spring對JDBC支持的核心主要是JdbcTemplate類,該類支持所有對數據庫的操作,可以使用它來完成對數據庫的增加、刪除、查詢、更新等操作。SpringJDBC還提供了數據庫事務管理機制,保證了數據的完整性和一致性。Spring對JDBC的支持大大簡化了對數據庫的操作步驟,使用戶從煩瑣的數據庫操作中解脫出來,將更多的精力投入業務邏輯中?!菊n堂問答】?【教師】隨機邀請學生回答以下問題請同學們總結歸納,相對于傳統Java中的JDBC,Spring中的JDBC最明顯的優勢在什么地方??【學生】聆聽、思考、回答?【教師】總結學生的回答(二)SpringJDBC的配置SpringJDBC模塊主要由core(核心包)、dataSource(數據包)、object(對象包)和support(支持包)4個包組成。這4個包的具體說明如下。(1)core:包含了JDBC的核心功能,包括JdbcTemplate類、SimpleJdbcInsert類、SimpleJdbcCall類和NamedParameterJbdcTemplate類。(2)dataSource:訪問數據源的實用工具類,它支持多種數據源的實現,可以在Spring容器外部測試JDBC代碼。(3)object:以面向對象的方式訪問數據庫,它允許執行查詢操作并將返回結果作為業務對象,可以在數據表的列和業務對象的屬性之間映射查詢結果。(4)support:包含core和object包的支持類,如提供異常轉換功能的SQLException類。Spring對數據庫的操作都封裝在這4個包中,想要使用SpringJDBC,就需要對這些包進行配置。在Spring中,JDBC的配置是在XML配置文件中完成的,包括配置數據源、JDBC模板和注入類。SpringJDBC默認使用DriverManagerDataSource類對數據源進行管理,可以在Spring的XML配置文件中定義DriverManagerDataSource類的Bean,并注入JdbcTemplate類的Bean中,然后將JdbcTemplate類的Bean注入注入類的Bean中,具體配置如下。<!--配置數據源--><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!--數據庫驅動--> <propertyname="driverClassName"value="com.mysql.cj.jdbc.Driver"/> <!--數據庫url--> <propertyname="url"value="jdbc:mysql://localhost:3306/db_spring"/> <!--數據庫用戶名--> <propertyname="username"value="root"/> <!--數據庫密碼--> <propertyname="password"value="root"/></bean><!--配置JDBC模板--><beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"ref="dataSource"/></bean><!--配置注入類--><beanid="xxx"class="Xxx"> <propertyname="jdbcTemplate"ref="jdbcTemplate"/></bean>在以上配置中,DriverManagerDataSource類的Bean實例dataSource需要配置4個屬性用于連接數據庫,如表所示?!菊n堂問答】?【教師】隨機邀請學生回答以下問題請同學們總結歸納,dataSource配置的4個屬性分別是什么,以及每個屬性對應的含義是什么??【學生】聆聽、思考、回答?【教師】總結學生的回答表5-1中的屬性值需要根據數據庫類型或機器配置的不同進行相應設置。如果數據庫類型不同,則需要更改驅動名稱;如果數據庫不在本地,則需要將localhost替換成相應的主機IP。二、JdbcTemplate類?【教師】多媒體觀看視頻“JdbcTemplate類”,讓學生對JdbcTemplate類有個大概認識,理解JdbcTemplate類的常用方法,并通過JdbcTemplate類一個案例加深理解(一)JdbcTemplate類概述JdbcTemplate類是SpringJDBC核心包(core)中的核心類,它可以通過配置文件、注解、Java配置類等形式獲取數據庫的相關信息,實現對JDBC開發過程中的驅動加載、連接的開啟和關閉、SQL語句的創建與執行、異常處理、事務管理、數據類型轉換等操作的封裝。JdbcTemplate類繼承自抽象類JdbcAccessor,同時實現了JdbcTemplate接口。抽象類JdbcAccessor提供了一些訪問數據庫時使用的公共屬性,具體如下。DataSource:DataSource主要功能是連接數據庫。在具體的數據操作中,它還提供對數據庫連接的緩沖池和分布式事務的支持。SQLExceptionTranslator:SQLExceptionTranslator是一個接口,它負責對SQLException異常進行轉換。(二)JdbcTemplate類的常用方法JdbcTemplate類提供的方法可以很方便地實現數據的增刪改查,常用的方法包括execute()、update()和query()。1.execute()方法execute()方法一般用于執行更改數據庫結構的DDL語句,如create,drop,alter,truncate和rename等。execute()方法的語法格式如下。voidexecute(Stringsql)其中,sql表示要執行的SQL語句。例如,創建包含車型(name)和價格(price)字段的car表,可以使用下面代碼實現。Stringsql="createtablecar(namevarchar(20),pricedouble)";jdbcTemplate.execute(sql);2.update()方法update()方法一般用于執行管理數據庫中數據的DML語句,如insert,update,delete和select等。update()方法常用的語法格式如下。intupdate(Stringsql)intupdate(Stringsql,Object...args)其中,args表示要傳入SQL語句的參數。此方法返回執行該SQL語句的記錄的條數,為整型。例如,在car表中插入車型為“HQ9”及價格為300000的記錄,并更新該車型價格為280000,可以使用下面代碼實現。//定義SQL插入語句,實現在car表中插入記錄Stringsql="insertintocar(name,price)values("HQ9",300000)";jdbcTemplate.update(sql);//定義SQL更新語句,實現更新car表中的記錄sql="updatecarsetprice=?wherename=?";Object[]obj=newObject[]{280000,"HQ9"};intnum=jdbcTemplate.update(sql,obj);【課堂問答】?【教師】隨機邀請學生回答以下問題根據上述JdbcTemplate類中execute()方法和update()方法的介紹,請同學們對比分析,這兩種方法的具體使用場景。?【學生】聆聽、思考、回答?【教師】總結學生的回答3.query()方法query()方法用于執行查詢數據庫記錄的SQL語句,其常用的語法格式如下。<T>List<T>query(Stringsql,RowMapper<T>rowMapper,Object...args)其中,rowMapper用于確認返回的集合的類型。該方法返回一個List類型的結果。例如,查詢car表中的所有記錄,可以用下面代碼實現。//定義SQL查詢語句,實現查詢car表中的所有記錄Stringsql="select*fromcar";//創建BeanPropertyRowMapper對象,Car為包含車型和價格屬性的類RowMapper<Car>rowMapper=newBeanPropertyRowMapper<Car>(Car.class);//執行SQL查詢語句,并通過rowMapper返回結果List<Car>cars=jdbcTemplate.query(sql,rowMapper);此外,還可以使用queryForObject()方法查詢單條記錄,其語法格式如下。<T>TqueryForObject(Stringsql,RowMapper<T>rowMapper,Object...args)例如,查詢car表中車型為“HQ9”的單條記錄,可以用下面代碼實現。//定義SQL查詢語句,實現根據車型查詢car表中的記錄Stringsql="select*fromcarwherename=?";//創建BeanPropertyRowMapper對象,Car為包含車型和價格屬性的類RowMapper<Car>rowMapper=newBeanPropertyRowMapper<Car>(Car.class);//執行SQL查詢語句,并通過rowMapper返回結果Carcar=jdbcTemplate.queryForObject(sql,rowMapper,"HQ9");【例題】?【教師】出示【示例】,組織學生答題創建數據庫和表,并執行插入、更新、查詢和刪除賬戶記錄操作。?【學生】聆聽、思考、答題?【教師】解析例題【分析】首先使用cmd命令創建數據庫db_spring;接著創建賬戶類Account,在類中定義屬性及其設置和獲取方法;其次創建賬戶管理接口AccountManage及其實現類AccountManageImpl,在接口中定義插入、更新、查詢和刪除賬戶記錄方法并在類中重寫;然后創建配置文件jdbcTemplate.xml,在文件中配置數據源、JDBC模板和注入類;最后創建執行類JdbcTemplateTest,在類中使用execute()方法創建賬戶表accounts,并通過AccountManageImpl類的Bean調用插入、更新、查詢和刪除賬戶記錄方法執行相關操作。此外,實現Spring數據庫編程,還需引入SpringJDBC的核心依賴包spring-jdbc-xxx.jar、處理事務和異常的依賴包spring-tx-xxx.jar、MySQL的JDBC驅動包mysql-connector-j-xxx.jar?!緦嵤浚?)以管理員身份運行命令管理窗口,并登錄MySQL數據庫;然后輸入“createdatabasedb_spring;”命令創建db_spring數據庫;最后輸入“usedb_spring;”命令選擇db_spring數據庫,以及輸入“showtables;”命令查看該數據庫中的表,以便驗證后面數據表的創建,如圖所示。(2)將spring-framework-5.3.22文件夾中的spring-jdbc-5.3.22.jar和spring-tx-5.3.22.jar,以及通過/downloads/connector/j下載的mysql-connector-j-8.0.31.jar復制到spring項目的lib文件夾中,并添加至構建路徑。(3)在spring項目下創建com.spring.jdbc.JdbcTemplate包,并在包中創建Account類。在類中,定義賬戶id(id)、名稱(userName)和余額(balance)屬性,然后定義setXxx()和getXxx()方法設置和獲取屬性信息,接著定義toString()方法返回屬性信息。……實現代碼詳見教材(4)在com.spring.jdbc.JdbcTemplate包中創建AccountManage接口,并在接口中定義addAccount()、updateAccount()、queryAccountById()、queryAllAccount()和deleteAccount()方法?!瓕崿F代碼詳見教材(5)在com.spring.jdbc.JdbcTemplate包中創建AccountManageImpl類實現AccountManage接口,在類中定義jdbcTemplate屬性及其setXxx()方法,并重寫接口中定義的方法。其中,addAccount()、updateAccount()和deleteAccount()方法使用update()方法執行SQL語句,分別實現插入、更新和刪除賬戶記錄;queryAccountById()方法使用queryForObject()方法執行SQL語句,實現根據賬戶id查詢單個賬戶記錄;queryAllAccount()方法使用query()方法執行SQL語句,實現查詢所有賬戶記錄?!瓕崿F代碼詳見教材(6)在spring項目的resources源文件夾中創建jdbcTemplate.xml配置文件,并在文件中配置數據源、JDBC模板和注入類。其中,數據源的數據庫為db_spring,數據庫用戶名和密碼分別為root和123456;注入類為AccountManageImpl類。……實現代碼詳見教材(7)在com.spring.jdbc.JdbcTemplate包中創建JdbcTemplateTest類。在類的main()方法中首先加載jdbcTemplate.xml配置文件;然后獲取Bean實例jdbcTemplate,并通過其使用execute()方法執行SQL創建表語句,創建賬戶表accounts,包含id、name、balance字段;接著獲取Bean實例accountManage,以及創建Account類對象account,并通過account對象調用setXxx()方法設置賬戶信息,以及通過accountManage操作賬戶表?!瓕崿F代碼詳見教材(8)執行JdbcTemplateTest類,程序運行結果如圖所示?!菊n堂問答】?【教師】隨機邀請學生回答以下問題在步驟(3)中,賬戶類Account中,各屬性的setXxx()和getXxx()方法如何編寫??【學生】聆聽、思考、回答?【教師】總結學生的回答?提示在步驟(2)中,下載mysql-connector-j-8.0.31.jar時,在“SelectOperatingSystem”的下拉列表中選擇“PlatformIndependent”選項,然后單擊“PlatformIndependent(ArchitectureIndependent),ZIPArchive”的“Download”按鈕,如圖5-2所示。【學生】聆聽、思考、理解、記錄課堂實訓【教師】介紹課堂實訓要求,以及實訓內容,要求學生按照實訓要求完成實訓任務根據示例的要求,創建數據庫和表,并執行插入、更新、查詢和刪除賬戶記錄操作,結合老師的講解,請同學們編寫例5-1的代碼,完成預期的功能,并進行功能驗證?!緦W生】按照要求進行代碼編寫,完成后總結那部分代碼最容易出錯課堂小結【教師】簡要總結本節課的要點本次課介紹了SpringJDBC的優勢,降低了JDBCAPI的使用難度,使得處理JDBC的代碼更加簡潔。講解了SpringJDBC的四個包,以及如何對這些包進行配置。介紹了JdbcTemplate類的定義、作用、繼承關系。重點講解了JdbcTemplate類的常用方法:execute()、update()和query()。最后通過一個實例創建數據庫和表,并執行插入、更新、查詢和刪除賬戶記錄操作,將本次課所學貫穿到一起,達到學以致用?!緦W生】總結回顧知識點作業布置【教師】布置課后作業請根據本課內容,完成課后習題中的相關習題。【學生】完成課后任務教學反思第23次課
課題Spring數據庫編程(2)課時2課時(90min)教學目標知識目標:(1)了解事務的特性,以及Spring事務管理的基本思想(2)了解Spring事務管理的核心接口(3)掌握基于XML和注解的聲明式事務管理方法能力目標:能使用基于XML和注解的方式實現聲明式事務管理素質目標:通過學習Spring事務管理,培養邏輯思維,提高分析問題的能力教學重難點教學重點:Spring事務管理基本知識,Spring事務管理的核心接口,聲明式事務管理教學難點:基于XML和注解的聲明式事務管理教學方法問答法、討論法、講授法、任務驅動法教學用具電腦、投影儀、多媒體課件、教材教學過程主要教學內容及步驟課前任務【教師】布置課前任務,和學生負責人取得聯系,讓其
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年創意產業管理與市場調研能力綜合考試試卷及答案
- 2025年城市規劃與設計考試試題及答案
- 陜西省合陽縣2025年英語七年級第二學期期中監測試題含答案
- 幼兒園秤桿課件
- 體育運動訓練理論與實踐知識梳理
- 蛇咬傷的護理查房
- 普外科一病一品護理匯報
- 2025年安徽貨運從業模擬考試
- 數字版權保護系統協議
- 高級管理人員股權激勵計劃協議
- 企業政策宣講活動方案
- 自來水考試試題大題及答案
- (2025)發展對象考試題庫與答案
- 北京師范大學《微積分(2)》2023-2024學年第二學期期末試卷
- CJ/T 410-2012隔油提升一體化設備
- 鴻蒙模擬試題及答案
- 2025屆湖南長沙雅禮實驗中學七年級數學第二學期期末學業水平測試試題含解析
- 天津市濱海新區第四共同體2025年八下物理期末復習檢測試題含解析
- 客服投訴處理技巧培訓
- 醫學檢驗倫理規范與實踐
- TCWEA6-2019水利水電工程施工期度汛方案編制導則
評論
0/150
提交評論