位置: IT常识 - 正文

对java中代理的理解笔记(java代理有几种方式)

编辑:rootadmin
对java中代理的理解笔记 简单例子 package com.kfm.jdbc.day0328;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public interface Actor { void sing(double money); void jump(double money);}class Kun implements Actor{ @Override public void sing(double money) { System.out.println("收了" + money + "元,唱了一首《只因你太美》"); } @Override public void jump(double money) { System.out.println("收了" + money + "元,跳了一个舞"); }}class Agent implements Actor{ private Actor actor; public Agent(Actor actor){ this.actor = actor; } @Override public void sing(double money) { this.actor.sing(money * 0.8); } @Override public void jump(double money) { this.actor.jump(money * 0.9); }}class Main { public static void main(String[] args) { Kun kun = new Kun(); Actor o = (Actor) Proxy.newProxyInstance(Kun.class.getClassLoader(), new Class[]{Actor.class}, new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { String name = method.getName(); if ("sing".equals(name)){ System.out.println("请他唱歌先请我吃饭"); return method.invoke(kun, args); } else { System.out.println("做其他事得加钱"); return method.invoke(kun, args); } } } ); o.sing(1.1); o.jump(2.2);// Agent agent = new Agent(kun);// agent.sing(50000); }}对例子进行分析:有一个actor的接口,有jump和sing两个方法ikun实现了此接口但是你能直接见到IKUN吗???因此需要一个agent也来实现actor接口,但是,agent需要赚一点差价现在在代码每次运行时,来一个agent,因此就用到代理:

推荐整理分享对java中代理的理解笔记(java代理有几种方式),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:java 代理对象,java代理cglib,java代理类应用场景,java代理有几种方式,java代理有几种方式,java 代理对象,java代理有几种方式,java中代理的作用,内容如对您有帮助,希望把文章链接给更多的朋友!

在 Main 类中,首先创建了一个 Kun 对象 kun,然后使用 Java 反射机制,创建了一个代理对象 o,代理的是 Kun 类。在代理对象的创建过程中,传入了 Kun 类的类加载器、Actor 接口的 Class 对象和一个 InvocationHandler 对象。这个 InvocationHandler 对象的作用是拦截代理对象方法的调用,对调用进行增强。在 invoke 方法中,首先判断调用的方法是 sing 还是 jump,如果是 sing 方法,则输出一条信息“请他唱歌先请我吃饭”,然后再调用 kun 对象的 sing 方法。如果是 jump 方法,则输出一条信息“做其他事得加钱”,然后再调用 kun 对象的 jump 方法。最后,通过代理对象 o 调用了 sing 和 jump 方法。在这个示例中,代理对象 o 拦截了 sing 和 jump 方法的调用,对 sing 方法进行了增强,输出了一条信息,而对 jump 方法没有进行增强,只是输出了一条提示信息。

对java中代理的理解笔记(java代理有几种方式)

Proxy.newProxyInstance 是 Java 动态代理的一个方法,用于创建代理对象。它有三个参数:

ClassLoader 类加载器,用于加载代理对象的 Class 文件。 Class<?>[] interfaces,被代理对象实现的接口列表,这些接口必须是非 final 类型。 InvocationHandler invocationHandler,实现了 InvocationHandler 接口的对象,用于拦截代理对象的方法调用并进行增强。 在这段代码中,Kun.class.getClassLoader() 表示使用 Kun 类的类加载器来加载代理对象的 Class 文件。new Class[]{Actor.class} 表示要代理的接口列表,这里只有 Actor 接口。new InvocationHandler() 表示实现了 InvocationHandler 接口的对象,这里使用了匿名内部类来实现。在这个匿名内部类中,重写了 invoke 方法,用于拦截代理对象的方法调用并进行增强。

最后,将代理对象强制转换为 Actor 类型,并将其赋值给 o 变量,o 可以调用 Actor 接口中的方法,实际上调用的是被代理对象 Kun 的对应方法,而 InvocationHandler 中的增强操作也会被执行。

invoke() 方法是 InvocationHandler 接口中的一个方法,用于拦截代理对象的方法调用并进行增强。它有三个参数:

Object proxy,代理对象本身,通常在 invoke() 方法中不会使用到。 Method method,代理对象被调用的方法对象。 Object[] args,代理对象被调用的方法的参数列表。 在这段代码中,invoke() 方法首先通过 Method 对象获取被调用方法的名字,然后判断被调用的方法是 sing 还是其他方法。如果是 sing 方法,就输出一句话并调用被代理对象 Kun 的 sing() 方法,并将其返回值作为 invoke() 方法的返回值。如果是其他方法,就输出另一句话并调用被代理对象 Kun 的对应方法,并将其返回值作为 invoke() 方法的返回值。

因此,当代理对象 o 调用 sing() 方法时,实际上会调用 invoke() 方法,并在其中输出一句话,并调用被代理对象 Kun 的 sing() 方法,并将其返回值作为 o.sing() 的返回值。当代理对象 o 调用 jump() 方法时,实际上也会调用 invoke() 方法,并在其中输出另一句话,并调用被代理对象 Kun 的 jump() 方法,并将其返回值作为 o.jump() 的返回值。

本文链接地址:https://www.jiuchutong.com/zhishi/300151.html 转载请保留说明!

上一篇:目标检测算法——图像分割数据集汇总(附下载链接)(一阶段目标检测算法)

下一篇:前端实现分页效果(前端分页显示)

  • 企业快速发展下,品牌营销要从重塑客户体验做起(企业快速发展下一步工作)

    企业快速发展下,品牌营销要从重塑客户体验做起(企业快速发展下一步工作)

  • 抖音支付绑定银行卡怎么解绑(抖音支付绑定银行卡有风险吗)

    抖音支付绑定银行卡怎么解绑(抖音支付绑定银行卡有风险吗)

  • oppo手机照片怎么重命名发给别人(oppo手机照片怎么转换成pdf)

    oppo手机照片怎么重命名发给别人(oppo手机照片怎么转换成pdf)

  • 荣耀x10如何隐藏应用(荣耀x10如何隐藏桌面图标)

    荣耀x10如何隐藏应用(荣耀x10如何隐藏桌面图标)

  • oppo手机非常卡怎么解决呀(oppo手机很卡怎么办)

    oppo手机非常卡怎么解决呀(oppo手机很卡怎么办)

  • 华为擦除数据后会怎样(华为擦除数据后能否刷机)

    华为擦除数据后会怎样(华为擦除数据后能否刷机)

  • 腾讯视频扫二维码在哪(腾讯视频扫二维码怎么登录别人的会员)

    腾讯视频扫二维码在哪(腾讯视频扫二维码怎么登录别人的会员)

  • 电池放电是什么能转化为什么能(电池放电是什么能量转化)

    电池放电是什么能转化为什么能(电池放电是什么能量转化)

  • 闲鱼签收后不退不换有效吗(闲鱼签收后不退不换还能退吗)

    闲鱼签收后不退不换有效吗(闲鱼签收后不退不换还能退吗)

  • 耳机音量安全警告没了(耳机声音调到安全等级之上确定后怎么调回来)

    耳机音量安全警告没了(耳机声音调到安全等级之上确定后怎么调回来)

  • 华为nova5pro网速慢是怎么回事(华为nova5pro网速跟时间怎么换位置)

    华为nova5pro网速慢是怎么回事(华为nova5pro网速跟时间怎么换位置)

  • 主板和显卡怎么搭配(主板和显卡怎么拆)

    主板和显卡怎么搭配(主板和显卡怎么拆)

  • ipad返回键怎么设置(apple ipad返回键怎么出来)

    ipad返回键怎么设置(apple ipad返回键怎么出来)

  • 快手加粉丝团是什么意思(快手加粉丝团是免费的吗)

    快手加粉丝团是什么意思(快手加粉丝团是免费的吗)

  • 荣耀9x和红米note8区别

    荣耀9x和红米note8区别

  • mate30有没有50倍变焦(华为mate30没有50倍变焦)

    mate30有没有50倍变焦(华为mate30没有50倍变焦)

  • 笔记本电脑亮度怎么调(笔记本电脑亮度按键失灵)

    笔记本电脑亮度怎么调(笔记本电脑亮度按键失灵)

  • 网关是什么怎么填(网关是什么怎么看)

    网关是什么怎么填(网关是什么怎么看)

  • 阿里巴巴服务器在哪里(阿里巴巴服务器在水里泡着嘛)

    阿里巴巴服务器在哪里(阿里巴巴服务器在水里泡着嘛)

  • oppoa9时间显示怎么改(oppoa9手机怎么把时间显示在屏幕上)

    oppoa9时间显示怎么改(oppoa9手机怎么把时间显示在屏幕上)

  • vivo最近删除的照片删除怎么恢复(vivo最近删除的短信在哪里)

    vivo最近删除的照片删除怎么恢复(vivo最近删除的短信在哪里)

  • 如何使用php中codeIgniter框架?(phpipam使用)

    如何使用php中codeIgniter框架?(phpipam使用)

  • 城建税和教育费附加减免政策
  • 业务招待费税前扣除标准是
  • 缴纳附加税会计科目怎么做
  • 商品流通企业应收账款的研究
  • 农产品加工会计分录
  • 计提印花税会计分录最新
  • 礼品费如何报销
  • 定额发票可以用旧的营业执照发票章吗
  • 劳务派遣公司简介模板范文
  • 餐饮行业打折部门是什么
  • 旧公司库存如何管理
  • 会计学中递延收益怎么算
  • 事业单位利息收入
  • 进项税小于销项税怎么处理
  • 免抵税额是否能抵销项税额呢?
  • 银行摘要冲账是什么意思
  • 建筑装饰行业税负
  • 销售人员差旅费管理办法
  • 公司如何为员工缴纳社保
  • 简易计税劳务分包发票可以差额抵扣吗
  • 税务师入会与不入会冲突
  • 安全提取费用标准
  • win7系统如何查看主板型号
  • 临时文件夹无写入权限这是什么原因
  • php数组查找函数
  • 电子税务局清算备案能撤销吗
  • mac 10.11系统
  • 微软win11预览版
  • explorer进程作用
  • win10右键个性化显示该文件
  • 发票开具的常见错误
  • 房地产企业公司
  • 办公楼装修费两万合理吗
  • 生产企业可以抵扣进项税的
  • 缴纳水利建设基金计入什么科目
  • vports命令
  • 代发工资如何计算
  • php中为什么图片显示不出来
  • 绿化苗木抵扣税是多少
  • 什么时候进项税转出
  • 销售退回的会计科目
  • 财政补贴收入账务处理
  • 借款人和还款人不一致,收据打给谁
  • SQLserver行转列
  • 收购少数股东权益是利好吗
  • 增值税附加税的比例
  • 出口货物没有进项发票用什么平台申报
  • 现金日记账采用哪一种账簿的形式
  • 软件开发过程付什么费用
  • 营改增后劳务派遣公司账务处理
  • 仓库盘点后的数据怎么处理
  • 电费已支付未充值
  • 福利费为什么不可以抵扣进项税
  • 跨年发票应该如何处理
  • 支付进口增值税
  • 运杂费扣除增值税进项税额
  • 苹果正式推送ios
  • centos7搭建nfs详细步骤
  • 乌班图系统切换root
  • win8强制关闭程序
  • sdstat.exe - sdstat是什么进程 有什么用
  • javascriptweb
  • bootstrap需要学多久
  • shell获取文件内容给变量
  • Node.js中的事件循环是什么意思
  • cmd的tree指令
  • jquery获取table的tr
  • jquery中给指定元素添加样式
  • python基础入门教程
  • android自定义viewgroup绘制
  • javascript面向对象精要
  • 内容滑动切换效果怎么弄
  • 基于js实现微信直播
  • jquery ajax局部加载方法详解(实现代码)
  • 税务开票明细
  • 注册会计师和注册建造师哪个难考
  • 油品贸易公司资质
  • 税务局科员是什么职业
  • 深圳龙华九价怎么预约
  • 发票清单盖章样本图片
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设