JavaEE企業級項目開發(第3版)課件 微課5-3:CGLIB動態代理_第1頁
JavaEE企業級項目開發(第3版)課件 微課5-3:CGLIB動態代理_第2頁
JavaEE企業級項目開發(第3版)課件 微課5-3:CGLIB動態代理_第3頁
JavaEE企業級項目開發(第3版)課件 微課5-3:CGLIB動態代理_第4頁
JavaEE企業級項目開發(第3版)課件 微課5-3:CGLIB動態代理_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

主講人:閭楓延遲符CGLIB動態代理SpringAOPCGLIB動態代理延遲符JDK的動態代理機制只能代理實現了接口的類,而不能實現接口的類就不能使用JDK的動態代理。當目標對象沒有實現任何接口時,SpringAOP會使用CGLIB(CodeGenerationLibrary)來創建代理對象。CGLIB(CodeGenerationLibrary)CGLIB代理也叫子類代理,它是在內存中構建一個子類對象從而實現對目標對象功能擴展。JDK動態代理只能對接口進行代理,而CGLIB既可以代理普通類,也能夠代理接口。CGLIB通過繼承目標對象來創建代理對象,代理對象是目標對象的子類,即是對指定的目標類生成一個子類,并覆蓋其中方法來實現增強。CGLIB動態代理延遲符學習案例案例代碼接下來,就通過一個案例來演示:CGLIB實現動態代理的過程。CGLIB動態代理代理-案例延遲符packagecom.test.dao;//員工接口類publicinterfaceEmployeeDAO{//添加員工publicvoidaddEmployee();//刪除員工publicvoiddeleteEmployee();}1.定義功能接口及實現類packagecom.test.dao;importorg.springframework.stereotype.Repository;@Repository//員工操作實現類publicclassEmployeeDAOImplimplementsEmployeeDAO{@OverridepublicvoidaddEmployee(){System.out.println("添加員工操作......");}@OverridepublicvoiddeleteEmployee(){System.out.println("刪除員工操作......");}}CGLIB動態代理-案例延遲符packagecom.test;//切面類,進行功能增強publicclassMyAspect{publicvoidlog(){System.out.println("模擬日志記錄......");}}2.定義切面類/***method攔截的方法*objects攔截方法的參數數組*methodProxy方法的代理對象,用于執行父類的方法*/@OverridepublicObjectintercept(Objecto,Methodmethod,Object[]objects,MethodProxymethodProxy)throwsThrowable{//創建切面類對象MyAspectmyAspect=newMyAspect();//功能前增強myAspect.log();//執行目標對象的目標方法Objectobj=methodProxy.invokeSuper(o,objects);//功能后增強myAspect.log();returnobj;}CGLIB動態代理-案例延遲符//CGLIB動態代理publicclassCGLIBProxyimplementsMethodInterceptor{//代理方法publicObjectcreateProxy(Objecttarget){//創建一個工具類對象Enhancerenhancer=newEnhancer();//設置需要增強的類,可以是類或接口enhancer.setSuperclass(target.getClass());//設置回調函數enhancer.setCallback(this);//生成代理類對象并返回returnenhancer.create();}}3.定義代理類CGLIB動態代理-案例延遲符publicclassCGLIBTest{publicstaticvoidmain(String[]args){//創建代理對象CGLIBProxycglibProxy=newCGLIBProxy();//創建目標對象EmployeeDAOemployeeDAO=newEmployeeDAOImpl();employeeDAO.addEmployee();employeeDAO.deleteEmployee();//通過切面,進行增強處理后System.out.println("-------------------------------");//從代理對象中獲取增強后的目標對象EmployeeDAOemployeeDAO1=(EmployeeDAO)cglibProxy.createProxy(employeeDAO)

溫馨提示

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

評論

0/150

提交評論