全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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(); 
  } 
} 

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


# java  # 中动态代理  # JDK动态代理与cglib动态代理  # 深入理解java动态代理的两种实现方式(JDK/Cglib)  # java动态代理(jdk与cglib)详细解析  # 浅谈Java代理(jdk静态代理、动态代理和cglib动态代理)  # Java反射(JDK)与动态代理(CGLIB)详解  # Java JDK与cglib动态代理有什么区别  # java中jdk代理和cglib代理使用步骤详解  # 希望能  # 重写  # 即是  # 谢谢大家  # 创建一个  # lang  # DynamicProxy  # Object  # private  # InvocationHandler  # Method  # invoke  # reflect  # throws  # return  # Throwable  # Proxy  # result 


相关文章: 建站之星云端配置指南:模板选择与SEO优化一键生成  建站主机CVM配置优化、SEO策略与性能提升指南  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  太原网站制作公司有哪些,网约车营运证查询官网?  建站之星后台密码遗忘?如何快速找回?  如何快速搭建高效香港服务器网站?  如何通过免费商城建站系统源码自定义网站主题与功能?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  常州企业网站制作公司,全国继续教育网怎么登录?  广平建站公司哪家专业可靠?如何选择?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  C++如何使用std::optional?(处理可选值)  宝塔新建站点报错如何解决?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  西安专业网站制作公司有哪些,陕西省建行官方网站?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  存储型VPS适合搭建中小型网站吗?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  如何解决VPS建站LNMP环境配置常见问题?  淘宝制作网站有哪些,淘宝网官网主页?  如何登录建站主机?访问步骤全解析  建站之星备案是否影响网站上线时间?  Java解压缩zip - 解压缩多个文件或文件夹实例  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  无锡营销型网站制作公司,无锡网选车牌流程?  建站之星微信建站一键生成小程序+多端营销系统  制作旅游网站html,怎样注册旅游网站?  活动邀请函制作网站有哪些,活动邀请函文案?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  建站之星代理如何获取技术支持?  建站主机选哪种环境更利于SEO优化?  北京网站制作公司哪家好一点,北京租房网站有哪些?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  如何通过VPS建站无需域名直接访问?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  如何零基础在云服务器搭建WordPress站点?  建站之星如何实现五合一智能建站与营销推广?  如何用PHP快速搭建CMS系统?  深入理解Android中的xmlns:tools属性  建站主机如何选?性能与价格怎样平衡?  建站上传速度慢?如何优化加速网站加载效率?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  jQuery 常见小例汇总  如何在阿里云购买域名并搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。