




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 木材防腐與防蟲處理技術考核試卷
- 礦產資源調查與評價方法-石墨滑石考核試卷
- 生物質成型燃料的燃燒污染物排放與控制考核試卷
- 秋風初一語文作文
- 靜下心來初三語文作文
- 真空設備在化工領域的應用考核試卷
- 機械式停車設備維護保養技巧考核試卷
- 玻璃制品疲勞壽命評估考核試卷
- 粉末冶金在汽車尾氣凈化領域的應用考核試卷
- 電子電路的智能電網應用考核試卷
- 銀行等安全保衛現場檢查要點清單
- 活動場地租賃與活動安全責任協議
- 《數據統計與分析》課件
- 2024年河南職業技術學院單招職業適應性考試題庫必考題
- (二模)新疆維吾爾自治區2025年普通高考第二次適應性檢測 英語試卷(含答案詳解)
- 征信系統AI應用行業深度調研及發展戰略咨詢報告
- 書法藝術療愈在書法教育中的實踐與應用研究
- 射頻電路封裝設計與工藝實現方法研究
- 2025年中國航天日知識競賽考試題庫300題(含答案)
- 物業項目經理考題及答案
- T-JSQX 0016-2024 無人駕駛配送裝備通.用技術要求
評論
0/150
提交評論