《JavaEE框架技術》課件05Spring框架基礎-AOP_第1頁
《JavaEE框架技術》課件05Spring框架基礎-AOP_第2頁
《JavaEE框架技術》課件05Spring框架基礎-AOP_第3頁
《JavaEE框架技術》課件05Spring框架基礎-AOP_第4頁
《JavaEE框架技術》課件05Spring框架基礎-AOP_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1第7章Spring框架基礎

之AOP框架程序設計(Java)26.0學習目標SpringAOP介紹1SpringAOP使用2軟件工程系本科課件框架程序設計java37.1SpringAOP介紹匯編語言C語言C++/java/C#面向機器編程面向過程編程面向對象編程面向切面編程語言的發展歷史軟件工程系本科課件框架程序設計java47.1SpringAOP介紹AOP:AspectOrientedProgramming,面向切面編程,可以說是OOP(ObjectOrientedProgramming,面向對象編程)的補充和完善。OOP引入封裝、繼承、多態等概念來建立一種對象層次結構AOP則利用一種稱為“橫切”的技術,剖開對象內部,并將影響了多個類的的公共行為封裝到可重用模塊,從而減少重復代碼,降低耦合。軟件工程系本科課件框架程序設計java57.1SpringAOP介紹StudentServiceClassServiceCourseService記錄日志記錄日志記錄日志記錄日志權限服務事務安全緩存軟件工程系本科課件框架程序設計java67.2SpringAOP使用AOP術語:通知(Advice)連接點(Joinpoint)切點(Poincut)切面(Aspect)織入(Weaving)引入(Introduction)大多數用于描述AOP功能的術語并不直觀,為了理解AOP,我們必須了解這些術語。軟件工程系本科課件框架程序設計java77.2SpringAOP使用用通俗的語言來描述AOP術語:切面包含通知和切點通知定義了切面的作用以及何時使用。切點定義了切面在何處使用,定義切面使用范圍連接點是在應用執行過程中滿足切點范圍的具體的點織入是把切面應用到目標對象引入允許我們向現有的類添加新方法或屬性。軟件工程系本科課件框架程序設計java87.2SpringAOP使用例子:貓抓老鼠續我們可以分為貓和老鼠兩類對象,貓擁有抓的方法,如下:

//貓類 publicclasscat{ //貓抓老鼠的方法 pubicvoidcatch(mousem){ //貓抓老鼠的業務邏輯代碼 ........... } } //老鼠類publicclassmouse{}軟件工程系本科課件框架程序設計java97.2SpringAOP使用publicclasscat{ //貓抓老鼠的方法 pubicvoidcatch(mousem){

//貓抓老鼠的業務邏輯代碼 ........... } }切面包括通知和切點通知指切面的作用和何時使用,這里是指記錄日志,在調用方法前使用切點指切面作用的范圍,這里指catch方法以及其他需要記錄日志的所有方法,可以使用切點表達式來描述連接點指在程序運行的時候具體的切入點此處定義切面,在執行方法時進行攔截記錄日志軟件工程系本科課件框架程序設計java107.2SpringAOP使用下面演示貓抓老鼠并記錄日志的代碼:在使用AOP之前的代碼如下://老鼠類publicclassMouse{ privateStringname;

//省略get/set方法}//日志記錄類publicclassLog{ publicvoidwriteLog(){ System.out.println("日志信息:貓抓到了老鼠,時間:"+newDate().toLocaleString()); }}

軟件工程系本科課件框架程序設計java117.2SpringAOP使用//貓類publicclassCat{ privateStringname;

//省略get/set方法 publicvoidcatchMouse(Mousem,Stringloc){//記錄日志的代碼 Loglog=newLog(); log.writeLog(); //貓抓老鼠的業務邏輯代碼 System.out.println(name+"貓抓到了老鼠"+m.getName()); }}

軟件工程系本科課件框架程序設計java127.2SpringAOP使用//在spring配置文件中配置bean<beanid="cat"class="domain.Cat"></bean><beanid="mouse"class="domain.Mouse"></bean>//代碼中調用//初始化一個容器上下文ApplicationContextcontext=newClassPathXmlApplicationContext("applicationContext.xml");//從context中獲取beanCatcat=(Cat)context.getBean("cat");cat.setName("tom");Mousemouse=(Mouse)context.getBean("mouse");mouse.setName("jerry");cat.catchMouse(mouse,"觀音橋");

軟件工程系本科課件框架程序設計java137.2SpringAOP使用上面的代碼Cat類的catch方法中,既有業務邏輯代碼,又有記錄日志的公共服務代碼,很不合理,下面使用SpringAOP將其分離Cat類去除記錄日志代碼,修改如下://貓類publicclassCat{ privateStringname;

//省略get/set方法 publicvoidcatchMouse(Mousem,Stringloc){//貓抓老鼠的業務邏輯代碼 System.out.println(name+"貓抓到了老鼠"+m.getName()); }}軟件工程系本科課件框架程序設計java147.2SpringAOP使用第一步:如果要使用AOP,需要引入spring的spring-aop-4.3.0.RELEASE.jar,還要引入第三方的一個jar包aspectjweaver.jar第二步:修改Spring配置文件的頭部(因為要用到aop標簽)<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:aop="/schema/aop"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/aop/schema/aop/spring-aop.xsd">軟件工程系本科課件框架程序設計java157.2SpringAOP使用第三步:配置切面<!--定義通知--> <beanid="catlog"class="domain.Log"/>

<aop:config>

<!--定義切點--> <aop:pointcutexpression="execution(*domain.Cat.catchMouse(..))" id="pointcut"/>

<!--定義切面--> <aop:aspectref="catlog">

<!--前置通知--> <aop:beforepointcut-ref="pointcut"method="writeLog"/> </aop:aspect>

</aop:config>軟件工程系本科課件框架程序設計java167.2SpringAOP使用說明:1、定義通知類bean2、通過aop:config標簽配置所有的切面3、通過aop:pointcut標簽配置切點,使用切點表達式來指定范圍execution(*domain.Cat.catchMouse(..))4、通過aop:aspect定義切面,指定引用的通知以及通知的類型和切點切入點是方法返回值匹配全類名匹配方法名匹配方法參數匹配軟件工程系本科課件框架程序設計java177.2SpringAOP使用說明:5、通知根據通知的時機區分有五種類型:前置通知,使用aop:before標簽,在方法之前執行后置通知,使用aop:after標簽,在方法之后執行,無論方法內部是否拋出異常后置返回通知,使用aop:after-returning標簽,在方法之后執行并且方法內部不能拋出異常后置異常通知,使用aop:after-throwing標簽,在方法內部拋出異常時執行環繞通知,使用aop:around標簽,在方法之前和之后都執行軟件工程系本科課件框架程序設計java187.2SpringAOP使用說明:6、前四種通知的方法里面我們可以通過JoinPoint參數獲取連接點信息,比如參數信息等,方便進行處理7、環繞通知的方法里我們通過ProceedingJoinPoint參數來獲取連接點信息第6條說明示例如下:軟件工程系本科課件框架程序設計java197.2SpringAOP使用//日志記錄類publicclassLog{ publicvoidwriteLog(JoinPointpoint){ //通過point.getTarget()獲取切面織入的對象 Catcat=(Cat)point.getTarget(); //通過point.getArgs()獲取連接點的參數 Object[]args=point.getArgs(); Mousem=(Mouse)args[0]; Stringloc=args[1].toString(); System.out.println("日志信息:"+cat.getName()+"貓在"+loc+"抓到老鼠"+m.getName()+",時間:"+newDate().toLocaleString()+""); }}軟件工程系本科課件框架程序設計java20第10次作業在項目中有一個service類,如下:publicclassUserService{ privateStringname;

//省略get/set方法 publicvoidsayHello(){ System.out.println("hello,"+name); }}軟件工程系本科課件框架程序設計java21第10次作業有一個Validate類,如下:publicclassValidate{ pu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論