欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java 中動(dòng)態(tài)代理(JDK,cglib)實(shí)例代碼

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

java 動(dòng)態(tài)代理實(shí)例詳解

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

/** 
 * 
 */ 
package com.sinosoft; 
 
/** 
 *接口:編寫一個(gè)委托類的接口,即靜態(tài)代理的(Apple接口) 
 * 
 */ 
public interface Apple { 
   
  public void phoneCall(); 
} 
 
 
 
/** 
 * 
 */ 
package com.sinosoft; 
 
/** 
 * 實(shí)現(xiàn)一個(gè)真正的委托類,即靜態(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)建一個(gè)動(dòng)態(tài)代理類,實(shí)現(xiàn)InvocationHandler接口,并重寫該invoke方法 
 * 
 */ 
public class DynamicProxy implements InvocationHandler{ 
  
   
  private Object object; 
   
  public DynamicProxy(Object object) { 
    this.object=object; 
  } 
  /* 
   * proxy參數(shù)傳遞的即是代理類的實(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動(dòng)態(tài)代理 
 * 
 */ 
public class testDynamicProxy { 
  public static void main(String[] args) { 
    //1.創(chuàng)建接口的實(shí)現(xiàn)類 
    Apple tApple = new AppleImpl(); 
    //2.動(dòng)態(tài)代理類 
    DynamicProxy tDynamicProxy = new DynamicProxy(tApple); 
    ClassLoader tClassLoader = tApple.getClass().getClassLoader(); 
    //   創(chuàng)建動(dòng)態(tài)代理的對(duì)象,需要借助Proxy.newProxyInstance。該方法的三個(gè)參數(shù)分別是: 
    //   ClassLoader loader表示當(dāng)前使用到的appClassloader。 
    //   Class<?>[] interfaces表示目標(biāo)對(duì)象實(shí)現(xiàn)的一組接口。 
    //   InvocationHandler h表示當(dāng)前的InvocationHandler實(shí)現(xiàn)實(shí)例對(duì)象。 
    Apple apple = (Apple) Proxy.newProxyInstance(tClassLoader, new Class[] { Apple.class }, tDynamicProxy); 
    apple.phoneCall(); 
  } 
} 

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

/** 
 * 
 */ 
package com.sinosoft; 
 
/** 
 * 實(shí)現(xiàn)一個(gè)真正的委托類,即靜態(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(); 
  } 
} 

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

相關(guān)文章

  • 微服務(wù)間調(diào)用Retrofit在Spring?Cloud?Alibaba中的使用

    微服務(wù)間調(diào)用Retrofit在Spring?Cloud?Alibaba中的使用

    這篇文章主要為大家介紹了微服務(wù)間調(diào)用Retrofit在Spring?Cloud?Alibaba中的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Spingmvc中的HandlerMapping剖析

    Spingmvc中的HandlerMapping剖析

    這篇文章主要介紹了Spingmvc中的HandlerMapping剖析,Spingmvc中的HandlerMapping負(fù)責(zé)解析請(qǐng)求URL,對(duì)應(yīng)到Handler進(jìn)行處理,這里的Handler一般為Controller里的一個(gè)方法method,也可以為servlet或者Controller等,需要的朋友可以參考下
    2023-09-09
  • SpringBoot服務(wù)設(shè)置禁止server.point端口的使用

    SpringBoot服務(wù)設(shè)置禁止server.point端口的使用

    本文主要介紹了SpringBoot服務(wù)設(shè)置禁止server.point端口的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • Spring之@Lookup注解詳細(xì)解析

    Spring之@Lookup注解詳細(xì)解析

    這篇文章主要介紹了Spring之@Lookup注解詳細(xì)解析,當(dāng)采用@Autowired注解對(duì)單例bean注依賴的原型bean時(shí),會(huì)由于單例bean只會(huì)創(chuàng)建一次,導(dǎo)致依賴的原型bean也只會(huì)注入一次,@Lookup注解可以較為優(yōu)雅的解決此類問題,需要的朋友可以參考下
    2024-01-01
  • SpringBoot 使用 Ehcache 作為緩存的操作方法

    SpringBoot 使用 Ehcache 作為緩存的操作方法

    這篇文章主要介紹了SpringBoot 如何使用 Ehcache 作為緩存,我們通過添加 Ehcache 依賴、創(chuàng)建 Ehcache 配置文件并在 Spring Boot 應(yīng)用程序的配置文件中啟用 Ehcache 緩存,來配置 Ehcache 緩存,需要的朋友可以參考下
    2023-06-06
  • 如何在IDEA中對(duì) hashCode()和 equals() 利用快捷鍵快速進(jìn)行方法重寫

    如何在IDEA中對(duì) hashCode()和 equals() 利用快捷鍵快速進(jìn)行方法重寫

    這篇文章主要介紹了如何在IDEA中對(duì) hashCode()和 equals() 利用快捷鍵快速進(jìn)行方法重寫,需要的朋友可以參考下
    2020-08-08
  • logback的AsyncAppender高效日志處理方式源碼解析

    logback的AsyncAppender高效日志處理方式源碼解析

    這篇文章主要為大家介紹了logback的AsyncAppender高效日志處理方式源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Java通過python命令執(zhí)行DataX任務(wù)的實(shí)例

    Java通過python命令執(zhí)行DataX任務(wù)的實(shí)例

    今天小編就為大家分享一篇Java通過python命令執(zhí)行DataX任務(wù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • spring整合redis消息監(jiān)聽通知使用的實(shí)現(xiàn)示例

    spring整合redis消息監(jiān)聽通知使用的實(shí)現(xiàn)示例

    在電商系統(tǒng)中,秒殺,搶購,紅包優(yōu)惠卷等操作,一般都會(huì)設(shè)置時(shí)間限制,本文主要介紹了spring整合redis消息監(jiān)聽通知使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-12-12
  • idea 安裝 Mybatis 開發(fā)幫助插件 MyBatisCodeHelper-Pro 插件破解版的方法

    idea 安裝 Mybatis 開發(fā)幫助插件 MyBatisCodeHelper-Pro 插件破解版的方法

    MyBatisCodeHelper-Pro 插件可以幫助我們快速的開發(fā) mybatis,這篇文章給大家介紹idea 安裝 Mybatis 開發(fā)幫助插件 MyBatisCodeHelper-Pro 插件破解版的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2020-09-09

最新評(píng)論