当前位置: 移动技术网 > IT编程>开发语言>Java > java 中动态代理(JDK,cglib)实例代码

java 中动态代理(JDK,cglib)实例代码

2019年07月22日  | 移动技术网IT编程  | 我要评论
java 动态代理实例详解 1.jdk动态代理 /** * */ package com.sinosoft; /** *接口

java 动态代理实例详解

1.jdk动态代理

/** 
 * 
 */ 
package com.sinosoft; 
 
/** 
 *接口:编写一个委托类的接口,即静态代理的(apple接口) 
 * 
 */ 
public interface apple { 
   
  public void phonecall(); 
} 
 
 
 
/** 
 * 
 */ 
package com.sinosoft; 
 
/** 
 * 实现一个真正的委托类,即静态代理的(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; 
 
/** 
 * 创建一个动态代理类,实现invocationhandler接口,并重写该invoke方法 
 * 
 */ 
public class dynamicproxy implements invocationhandler{ 
  
   
  private object object; 
   
  public dynamicproxy(object object) { 
    this.object=object; 
  } 
  /* 
   * proxy参数传递的即是代理类的实例。method是调用的方法,即需要执行的方法;args是方法的参数; 
   * @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动态代理 
 * 
 */ 
public class testdynamicproxy { 
  public static void main(string[] args) { 
    //1.创建接口的实现类 
    apple tapple = new appleimpl(); 
    //2.动态代理类 
    dynamicproxy tdynamicproxy = new dynamicproxy(tapple); 
    classloader tclassloader = tapple.getclass().getclassloader(); 
    //   创建动态代理的对象,需要借助proxy.newproxyinstance。该方法的三个参数分别是: 
    //   classloader loader表示当前使用到的appclassloader。 
    //   class<?>[] interfaces表示目标对象实现的一组接口。 
    //   invocationhandler h表示当前的invocationhandler实现实例对象。 
    apple apple = (apple) proxy.newproxyinstance(tclassloader, new class[] { apple.class }, tdynamicproxy); 
    apple.phonecall(); 
  } 
} 

2.cglib动态代理

/** 
 * 
 */ 
package com.sinosoft; 
 
/** 
 * 实现一个真正的委托类,即静态代理的(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(); 
  } 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网