




版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 影視后期特效制作實戰(zhàn)手冊(如AE)
- 工程經(jīng)濟項目可行性研究報告
- 中級養(yǎng)老護理復習測試有答案
- 活動策劃報告
- 婦產(chǎn)科護理練習試題附答案
- 職場新人培訓計劃與教材編寫指南
- 物流倉儲作業(yè)指導手冊
- 三農(nóng)宣傳推廣與教育方案
- 智能家居設(shè)備維護與故障排除教程
- 交通運輸行業(yè)智能交通與自動駕駛技術(shù)研究方案
- 全國運動員注冊協(xié)議書范本(2篇)
- 《高點全景視頻監(jiān)控聯(lián)網(wǎng)技術(shù)要求》
- 白云山生態(tài)停車場工程施工組織設(shè)計施工方案
- 2024年四川省綿陽市中考語文試卷(附真題答案)
- 【MOOC】Office高級應用-成都信息工程大學 中國大學慕課MOOC答案
- 足球英語課件
- 盆底康復課件
- CNAS認可準則、規(guī)則考核專項測試題附答案
- 中等職業(yè)學校口腔修復工藝專業(yè)實訓教學條件建設(shè)標準
- 藥品經(jīng)營使用和質(zhì)量監(jiān)督管理辦法2024年宣貫培訓課件
- 保安服務 投標方案(技術(shù)標 )
評論
0/150
提交評論