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

溫馨提示×

溫馨提示×

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

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

Spring使用Proxy和cglib實現動態代理的方法

發布時間:2020-06-22 22:29:37 來源:億速云 閱讀:225 作者:元一 欄目:開發技術

這篇文章運用簡單易懂的例子給大家介紹Spring使用Proxy和cglib實現動態代理的方法,代碼非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

spring中提供了兩種動態代理的方式,分別是Proxy以及cglib,代理(Proxy)是一種設計模式,提供了對目標對象另外的訪問方式;即通過代理對象訪問目標對象.這樣做的好處是:可以在目標對象實現的基礎上,增強額外的功能操作,即擴展目標對象的功能;而cglib動態代理是利用asm開源包,對代理對象類的class文件加載進來,通過修改其字節碼生成子類來處理。

添加一個接口以及對應的實現類

public interface HelloInterface {
  void sayHello();
}
public class HelloInterfaceImpl implements HelloInterface {
  @Override
  public void sayHello() {
    System.out.println("hello");
  }
}

JavaProxy通過實現InvocationHandler實現代理

public class CustomInvocationHandler implements InvocationHandler {
  private HelloInterface helloInterface;

  public CustomInvocationHandler(HelloInterface helloInterface) {
    this.helloInterface = helloInterface;
  }

  @Override
  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    System.out.println("before hello for proxy");
    Object result = method.invoke(helloInterface, args);
    System.out.println("after hello for proxy");
    return result;
  }
}

而cglib實現MethodInterceptor進行方法上的代理

public class CustomMethodInterceptor implements MethodInterceptor {
  @Override
  public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
    System.out.println("before hello for cglib");
    Object result = methodProxy.invokeSuper(o, objects);
    System.out.println("after hello for cglib");
    return result;
  }

}

分別實現調用代碼

public static void main(String[] args) {
    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(HelloInterfaceImpl.class);
    enhancer.setCallback(new CustomMethodInterceptor());
    HelloInterface target = (HelloInterface) enhancer.create();
    target.sayHello();

    CustomInvocationHandler invocationHandler = new CustomInvocationHandler(new HelloInterfaceImpl());
    HelloInterface target2 = (HelloInterface) Proxy.newProxyInstance(Demo.class.getClassLoader(), new Class[]{HelloInterface.class}, invocationHandler);
    target2.sayHello();
  }

可以看到對于的代理信息輸出

before hello for cglib
hello
after hello for cglib
before hello for proxy
hello
after hello for proxy

關于Spring使用Proxy和cglib實現動態代理的方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

高碑店市| 大姚县| 灵台县| 石城县| 忻城县| 合山市| 桃源县| 崇明县| 邯郸县| 建始县| 永清县| 江陵县| 视频| 惠安县| 宜兰县| 寿宁县| 和林格尔县| 那曲县| 泾阳县| 介休市| 淮南市| 扶沟县| 梁山县| 陕西省| 隆昌县| 贵州省| 富平县| 浦北县| 禹城市| 土默特左旗| 高阳县| 临江市| 佛学| 成安县| 马尔康县| 紫阳县| 招远市| 安徽省| 石阡县| 黔南| 余干县|