最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 中動態(tài)代理(JDK,cglib)實例代碼

 更新時間:2017年04月24日 14:43:12   投稿:lqh  
這篇文章主要介紹了java 中動態(tài)代理,這里介紹了JDK 動態(tài)代理與 cglib 動態(tài)代理的相關(guān)資料

java 動態(tài)代理實例詳解

1.jdk動態(tài)代理

/** 
 * 
 */ 
package com.sinosoft; 
 
/** 
 *接口:編寫一個委托類的接口,即靜態(tài)代理的(Apple接口) 
 * 
 */ 
public interface Apple { 
   
  public void phoneCall(); 
} 
 
 
 
/** 
 * 
 */ 
package com.sinosoft; 
 
/** 
 * 實現(xiàn)一個真正的委托類,即靜態(tài)代理的(AppleImpl類) 
 * 
 */ 
public class AppleImpl implements Apple { 
 
  /* 
   * 打電話 
  */ 
  @Override 
  public void phoneCall() { 
    System.out.println("打電話"); 
  } 
 
} 
 
 
 
 
 
/** 
 * 
 */ 
package com.sinosoft; 
 
import java.lang.reflect.InvocationHandler; 
import java.lang.reflect.Method; 
 
/** 
 * 創(chuàng)建一個動態(tài)代理類,實現(xiàn)InvocationHandler接口,并重寫該invoke方法 
 * 
 */ 
public class DynamicProxy implements InvocationHandler{ 
  
   
  private Object object; 
   
  public DynamicProxy(Object object) { 
    this.object=object; 
  } 
  /* 
   * proxy參數(shù)傳遞的即是代理類的實例。method是調(diào)用的方法,即需要執(zhí)行的方法;args是方法的參數(shù); 
   * @param proxy 
   * @param method 
   * @param args 
   * @return 
   * @throws Throwable 
  */ 
  @Override 
  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 
    Object result = method.invoke(object, args); 
    return result; 
  } 
 
} 
 
 
 
 
 
 
/** 
 * 
 */ 
package com.sinosoft; 
 
import java.lang.reflect.Proxy; 
 
/** 
 * @author jdk動態(tài)代理 
 * 
 */ 
public class testDynamicProxy { 
  public static void main(String[] args) { 
    //1.創(chuàng)建接口的實現(xiàn)類 
    Apple tApple = new AppleImpl(); 
    //2.動態(tài)代理類 
    DynamicProxy tDynamicProxy = new DynamicProxy(tApple); 
    ClassLoader tClassLoader = tApple.getClass().getClassLoader(); 
    //   創(chuàng)建動態(tài)代理的對象,需要借助Proxy.newProxyInstance。該方法的三個參數(shù)分別是: 
    //   ClassLoader loader表示當(dāng)前使用到的appClassloader。 
    //   Class<?>[] interfaces表示目標(biāo)對象實現(xiàn)的一組接口。 
    //   InvocationHandler h表示當(dāng)前的InvocationHandler實現(xiàn)實例對象。 
    Apple apple = (Apple) Proxy.newProxyInstance(tClassLoader, new Class[] { Apple.class }, tDynamicProxy); 
    apple.phoneCall(); 
  } 
} 

2.cglib動態(tài)代理

/** 
 * 
 */ 
package com.sinosoft; 
 
/** 
 * 實現(xiàn)一個真正的委托類,即靜態(tài)代理的(AppleImpl類) 
 * 
 */ 
public class AppleClass{ 
  /* 
   * 打電話 
  */ 
  public void phoneCall() { 
    System.out.println("打電話"); 
  } 
 
} 
 
 
 
/** 
 * 
 */ 
package com.sinosoft; 
 
import java.lang.reflect.Method; 
 
import net.sf.cglib.proxy.MethodInterceptor; 
import net.sf.cglib.proxy.MethodProxy; 
 
/** 
 * @author Administrator 
 * 
 */ 
public class CglibProxy implements MethodInterceptor{ 
 
  /* 
   * 方法功能描述 
   * @param obj 
   * @param method 
   * @param args 
   * @param proxy 
   * @return 
   * @throws Throwable 
   * @see net.sf.cglib.proxy.MethodInterceptor#intercept(java.lang.Object, java.lang.reflect.Method, java.lang.Object[], net.sf.cglib.proxy.MethodProxy) 
  */ 
  @Override 
  public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { 
    // TODO Auto-generated method stub 
    Object object= proxy.invokeSuper(obj, args); 
    return object; 
  } 
 
} 
 
 
 
/** 
 * 
 */ 
package com.sinosoft; 
 
import net.sf.cglib.proxy.Enhancer; 
 
/** 
 * @author Administrator 
 * 
 */ 
public class TestCglibProxy { 
 
  public static void main(String[] args) { 
    CglibProxy tCglibProxy=new CglibProxy(); 
    Enhancer tEnhancer=new Enhancer(); 
    tEnhancer.setSuperclass(AppleClass.class);  
    tEnhancer.setCallback(tCglibProxy); 
     
    AppleClass tApple= (AppleClass)tEnhancer.create(); 
    tApple.phoneCall(); 
  } 
} 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • java中對字符串每個字符統(tǒng)計的方法

    java中對字符串每個字符統(tǒng)計的方法

    java中對字符串每個字符統(tǒng)計的方法,需要的朋友可以參考一下
    2013-03-03
  • JVM性能調(diào)優(yōu)實現(xiàn)原理及配置

    JVM性能調(diào)優(yōu)實現(xiàn)原理及配置

    這篇文章主要介紹了JVM性能調(diào)優(yōu)實現(xiàn)原理及配置,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • Mybatis(ParameterType)傳遞多個不同類型的參數(shù)方式

    Mybatis(ParameterType)傳遞多個不同類型的參數(shù)方式

    這篇文章主要介紹了Mybatis(ParameterType)傳遞多個不同類型的參數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java 內(nèi)置Http Server構(gòu)建web應(yīng)用案例詳解

    Java 內(nèi)置Http Server構(gòu)建web應(yīng)用案例詳解

    這篇文章主要介紹了Java 內(nèi)置Http Server構(gòu)建web應(yīng)用案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Java AQS(AbstractQueuedSynchronizer)源碼解析

    Java AQS(AbstractQueuedSynchronizer)源碼解析

    AbstractQueuedSynchronizer被稱為隊列同步器,簡稱為大家熟知的AQS,這個類可以稱作concurrent包的基礎(chǔ)。本文將通過剖析源碼來看看AQS是如何工作的,感興趣的可以了解一下
    2023-02-02
  • Java 封裝基礎(chǔ)知識

    Java 封裝基礎(chǔ)知識

    這篇文章主要介紹了Java 封裝的相關(guān)資料,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Java實戰(zhàn)之吃貨聯(lián)盟訂餐系統(tǒng)

    Java實戰(zhàn)之吃貨聯(lián)盟訂餐系統(tǒng)

    這篇文章主要介紹了Java實戰(zhàn)之吃貨聯(lián)盟訂餐系統(tǒng),文中有非常詳細的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java生成CSV文件實例詳解

    Java生成CSV文件實例詳解

    這篇文章主要介紹了Java生成CSV文件的方法,很實用的功能,需要的朋友可以參考下
    2014-07-07
  • Java 并發(fā)編程ArrayBlockingQueue的實現(xiàn)

    Java 并發(fā)編程ArrayBlockingQueue的實現(xiàn)

    這篇文章主要介紹了Java 并發(fā)編程ArrayBlockingQueue的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 如何用java對接微信小程序下單后的發(fā)貨接口

    如何用java對接微信小程序下單后的發(fā)貨接口

    這篇文章主要介紹了在微信小程序后臺實現(xiàn)發(fā)貨通知的步驟,包括獲取Access_token、使用RestTemplate調(diào)用發(fā)貨接口、處理AccessToken緩存以及發(fā)貨成功后的提醒,需要的朋友可以參考下
    2025-03-03

最新評論

黄大仙区| 肥乡县| 松溪县| 会理县| 随州市| 水城县| 崇信县| 运城市| 新乡县| 桃江县| 通化县| 曲阳县| 新田县| 平邑县| 大田县| 龙南县| 清原| 灵台县| 丹江口市| 尉氏县| 大足县| 贵港市| 健康| 繁峙县| 沭阳县| 富顺县| 汝南县| 渝北区| 卫辉市| 本溪市| 通化市| 淄博市| 游戏| 新巴尔虎右旗| 宜丰县| 延津县| 台前县| 宝丰县| 武胜县| 平陆县| 顺平县|