JavaEE企業(yè)級項目開發(fā)(第3版)課件 微課5-2:JDK動態(tài)代理_第1頁
JavaEE企業(yè)級項目開發(fā)(第3版)課件 微課5-2:JDK動態(tài)代理_第2頁
JavaEE企業(yè)級項目開發(fā)(第3版)課件 微課5-2:JDK動態(tài)代理_第3頁
JavaEE企業(yè)級項目開發(fā)(第3版)課件 微課5-2:JDK動態(tài)代理_第4頁
JavaEE企業(yè)級項目開發(fā)(第3版)課件 微課5-2:JDK動態(tài)代理_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

主講人:閭楓延遲符JDK動態(tài)代理SpringAOPSpringAOP的動態(tài)代理機制延遲符JDK動態(tài)代理CGLIB代理SpringAOP通過允許開發(fā)者定義橫切關(guān)注點,在不修改核心業(yè)務邏輯代碼的情況下,添加或修改這些橫切關(guān)注點,增強程序功能,提高模塊化程度。JDK動態(tài)代理延遲符JDK動態(tài)代理是通過Java的反射機制實現(xiàn)的,它為目標對象創(chuàng)建一個代理對象,這個代理對象實現(xiàn)了與目標對象相同的接口。當調(diào)用代理對象的方法時,代理對象會攔截調(diào)用,并可以在調(diào)用前后添加額外的邏輯(如日志記錄),然后再調(diào)用目標對象的方法。java.lang.reflect.Proxy是Java動態(tài)代理機制的主類,它提供了一組靜態(tài)方法來為一組接口動態(tài)地生成代理類及其對象。java.lang.reflect.InvocationHandler是調(diào)用處理器接口,它自定義了一個invoke方法,用于集中處理在動態(tài)代理類對象上的方法調(diào)用,通常在該方法中實現(xiàn)對委托類的代理訪問。JDK動態(tài)代理延遲符學習案例案例代碼接下來,就通過一個案例來演示:Spring中JDK動態(tài)代理的實現(xiàn)過程。JDK動態(tài)代理-案例延遲符<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.32</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.3.32</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.32</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.3.32</version></dependency>0.創(chuàng)建項目、引入依賴JDK動態(tài)代理-案例延遲符packagecom.test.dao;//員工接口類publicinterfaceEmployeeDAO{//添加員工publicvoidaddEmployee();//刪除員工publicvoiddeleteEmployee();}1.定義功能接口及實現(xiàn)類packagecom.test.dao;importorg.springframework.stereotype.Repository;@Repository//員工操作實現(xiàn)類publicclassEmployeeDAOImplimplementsEmployeeDAO{@OverridepublicvoidaddEmployee(){System.out.println("添加員工操作......");}@OverridepublicvoiddeleteEmployee(){System.out.println("刪除員工操作......");}}JDK動態(tài)代理-案例延遲符packagecom.test;//切面類,進行功能增強publicclassMyAspect{publicvoidlog(){System.out.println("模擬日志記錄......");}}2.定義切面類JDK動態(tài)代理-案例延遲符publicclassJDKProxyimplementsInvocationHandler{//聲明目標類,這是切面要切入的類privateEmployeeDAOemployeeDAO;//創(chuàng)建代理方法publicObjectcreateProxy(EmployeeDAOemployeeDAO){this.employeeDAO=employeeDAO;//1.類加載器ClassLoaderclassLoader=JDKProxy.class.getClassLoader();//2.被代理對象實現(xiàn)的所有接口Class[]clazz=employeeDAO.getClass().getInterfaces();//3.使用代理類,進行增強,返回的是代理后的對象returnProxy.newProxyInstance(classLoader,clazz,this);}@OverridepublicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{//聲明切面MyAspectmyAspect=newMyAspect();//在目標類上進行前增強myAspect.log();//在目標類上調(diào)用方法,并傳入?yún)?shù)

Objectobj=method.invoke(employeeDAO,args);returnobj;}}3.定義代理類JDK動態(tài)代理-案例延遲符publicclassJDKTest{publicstaticvoidmain(String[]args){//創(chuàng)建代理對象JDKProxyjdkProxy=newJDKProxy();//創(chuàng)建目標對象EmployeeDAOemployeeDAO=newEmployeeDAOImpl();employeeDAO.addEmployee();employeeDAO.deleteEmployee();//通過切面,進行增強處理后System.out.println("-------------------------------");//從代理對象中獲取增強后的目標對象EmployeeDAOemployeeDAO1=(Employee

溫馨提示

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

評論

0/150

提交評論