日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring中的CGLIB动态代理(代码)

發布時間:2025/3/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring中的CGLIB动态代理(代码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

因為jdk帶來具有局限性,使用動態代理的對象必須實現一個或多個接口,CGLIB代理不需要實現接口

UserDao.java目標類:

package com.liu.cglib;//目標類 public class UserDao {public void addUser() {System.out.println("添加方法");}public void deleteUser() {System.out.println("刪除方法");}}

CglibProxy.java代理類:

package com.liu.cglib;import java.lang.reflect.Method;import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy; //代理類import com.liu.aspect.MyAspect;public class CglibProxy implements MethodInterceptor{//創建代理方法public Object createProxy(Object object) {//創建一個動態類對象Enhancer enhancer = new Enhancer();//確定需要增強的類 設置其父類enhancer.setSuperclass(object.getClass());//添加回調函數enhancer.setCallback(this);//返回創建的代理類return enhancer.create();}//proxy cglib根據定義的父類生成的代理對象//method 攔截的方法//args 攔截的方法的參數數組//methProxy 方法的代理對象 用于執行父類的方法@Overridepublic Object intercept(Object proxy, Method method, Object[] args, MethodProxy methProxy) throws Throwable {// TODO Auto-generated method stub//創建切面對象MyAspect myAspect = new MyAspect();//前置增強myAspect.chek();//目標方法執行Object obj = methProxy.invokeSuper(proxy, args);//后置增強myAspect.log();return obj;}}

MyAspect.java切面類:

package com.liu.aspect;//切面類:里面可以存在多個advice通知方法 也就是增強類 public class MyAspect {public void chek() {System.out.println("模擬檢查方法....");}public void log() {System.out.println("模擬記錄日志....");} }

CglibTest.java測試類:

package com.liu.cglib;public class CglibTest {public static void main(String[] args) {//創建代理對象CglibProxy cglibProxy = new CglibProxy(); //創建目標對象UserDao userDao = new UserDao();//將目標對象傳入代理對象中 獲取增強后的方法UserDao userDao2 = (UserDao) cglibProxy.createProxy(userDao);//執行userDao2.addUser();userDao2.deleteUser();}}

運行結果:

模擬檢查方法.... 添加方法 模擬記錄日志.... 模擬檢查方法.... 刪除方法 模擬記錄日志....

JDK動態代理:https://blog.csdn.net/weixin_45151960/article/details/104602936

總結

以上是生活随笔為你收集整理的spring中的CGLIB动态代理(代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。