91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringCGLlB中怎么實現動態代理

發布時間:2021-08-07 14:17:49 來源:億速云 閱讀:107 作者:Leah 欄目:編程語言

SpringCGLlB中怎么實現動態代理,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

1. 創建目標類 GoodsDao

在 com.mengma.dao 包下創建目標類 GoodsDao,在類中定義增、刪、改、查方法,并在每個方法編寫輸出語句,如下所示。

package com.mengma.dao;public class GoodsDao {  public void add() {    System.out.println("添加商品...");  }  public void update() {    System.out.println("修改商品...");  }  public void delete() {    System.out.println("刪除商品...");  }  public void find() {    System.out.println("修改商品...");  }}

2. 創建代理類 MyBeanFactory

在 src 目錄下創建一個名為 com.mengma.cglib 的包,該包下創建類 MyBeanFactory,如下所示。

package com.mengma.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.mengma.dao.GoodsDao;import com.mengma.jdk.MyAspect;public class MyBeanFactory {  public static GoodsDao getBean() {    // 準備目標類    final GoodsDao goodsDao = new GoodsDao();    // 創建切面類實例    final MyAspect myAspect = new MyAspect();    // 生成代理類,CGLIB在運行時,生成指定對象的子類,增強    Enhancer enhancer = new Enhancer();    // 確定需要增強的類    enhancer.setSuperclass(goodsDao.getClass());    // 添加回調函數    enhancer.setCallback(new MethodInterceptor() {      // intercept 相當于 jdk invoke,前三個參數與 jdk invoke—致      @Override      public Object intercept(Object proxy, Method method, Object[] args,          MethodProxy methodProxy) throws Throwable {        myAspect.myBefore(); // 前增強        Object obj = method.invoke(goodsDao, args); // 目標方法執行        myAspect.myAfter(); // 后增強        return obj;      }    });    // 創建代理類    GoodsDao goodsDaoProxy = (GoodsDao) enhancer.create();    return goodsDaoProxy;  }}

上述代碼中,應用了 CGLIB 的核心類 Enhancer。在第 19 行代碼調用了 Enhancer 類的 setSuperclass() 方法,確定目標對象。

第 21 行代碼調用 setCallback() 方法添加回調函數;第 24 行代碼的 intercept() 方法相當于 JDK 動態代理方式中的 invoke() 方法,該方法會在目標方法執行的前后,對切面類中的方法進行增強;第 33~34 行代碼調用 Enhancer 類的 create() 方法創建代理類,最后將代理類返回。

3. 創建測試類

在 com.mengma.cglib 包下創建測試類 CGLIBProxyTest,編輯后如下所示。

package com.mengma.cglib;import org.junit.Test;import com.mengma.dao.GoodsDao;public class CGLIBProxyTest {  @Test  public void test() {    // 從工廠獲得指定的內容(相當于spring獲得,但此內容時代理對象)    GoodsDao goodsDao = MyBeanFactory.getBean();    // 執行方法    goodsDao.add();    goodsDao.update();    goodsDao.delete();    goodsDao.find();  }}

看完上述內容,你們掌握SpringCGLlB中怎么實現動態代理的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

柳河县| 邯郸县| 崇仁县| 米脂县| 桐柏县| 丹棱县| 布尔津县| 富蕴县| 玛纳斯县| 清丰县| 图木舒克市| 青神县| 庄河市| 中卫市| 铜鼓县| 三台县| 繁峙县| 阳江市| 青铜峡市| 古丈县| 宝鸡市| 三都| 友谊县| 萍乡市| 广汉市| 从江县| 仁寿县| 冕宁县| 卫辉市| 恩施市| 南康市| 望城县| 永春县| 讷河市| 呼图壁县| 汝城县| 常山县| 汾阳市| 鄯善县| 石首市| 赞皇县|