位置: 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 转载请保留说明!

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

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

  • 微信图片在电脑上怎么打印出来(微信图片在电脑c盘哪个文件夹)

    微信图片在电脑上怎么打印出来(微信图片在电脑c盘哪个文件夹)

  • 苹果11充电模式的设置方法(苹果11充电模式怎么设置)

    苹果11充电模式的设置方法(苹果11充电模式怎么设置)

  • 电脑桌面文件变大怎么调小(电脑桌面文件变大怎么缩小)

    电脑桌面文件变大怎么调小(电脑桌面文件变大怎么缩小)

  • wps怎么分页面(wps分页怎么分)

    wps怎么分页面(wps分页怎么分)

  • 电源总闸推不上去(电源总闸推不上去是什么原因)

    电源总闸推不上去(电源总闸推不上去是什么原因)

  • 华为信任软件怎么设置呢(华为信任软件怎么设置在哪里)

    华为信任软件怎么设置呢(华为信任软件怎么设置在哪里)

  • 微信红包为什么会被限制(微信红包为什么可以发520)

    微信红包为什么会被限制(微信红包为什么可以发520)

  • 无线满格信号但网速慢(无线满格信号但是网不好)

    无线满格信号但网速慢(无线满格信号但是网不好)

  • 连蓝牙耳机会被盗取信息吗(连接蓝牙耳机会不会中病毒)

    连蓝牙耳机会被盗取信息吗(连接蓝牙耳机会不会中病毒)

  • windows7的aero桌面具有透明的什么效果(windows7 桌面)

    windows7的aero桌面具有透明的什么效果(windows7 桌面)

  • word卡住了怎么保存(word卡住了怎么恢复)

    word卡住了怎么保存(word卡住了怎么恢复)

  • 抖音里的抖币值多少钱(抖音上的抖币是多少钱)

    抖音里的抖币值多少钱(抖音上的抖币是多少钱)

  • 智能键盘是什么(智能键盘是什么键)

    智能键盘是什么(智能键盘是什么键)

  • 手机连爱思助手没反应(手机连爱思助手不弹信任)

    手机连爱思助手没反应(手机连爱思助手不弹信任)

  • 锐龙1600相当于i几(锐龙1600相当于i几代)

    锐龙1600相当于i几(锐龙1600相当于i几代)

  • oppor15处理器是什么(oppor 15的处理器)

    oppor15处理器是什么(oppor 15的处理器)

  • 荣耀9x长宽高(荣耀9x长宽高多少)

    荣耀9x长宽高(荣耀9x长宽高多少)

  • 最快的超级计算机叫什么(最快的超级计算机的速度比量子计算机还要慢一百万倍)

    最快的超级计算机叫什么(最快的超级计算机的速度比量子计算机还要慢一百万倍)

  • office苹果系统能用吗(苹果系统可以用office)

    office苹果系统能用吗(苹果系统可以用office)

  • 苹果手机充电器不是原装的对手机有影响吗(苹果手机充电器漏电是什么原因)

    苹果手机充电器不是原装的对手机有影响吗(苹果手机充电器漏电是什么原因)

  • airpods定位准确吗(airpods定位会出错吗)

    airpods定位准确吗(airpods定位会出错吗)

  • iphone11pro怎么插双卡(苹果11pro怎么插耳机)

    iphone11pro怎么插双卡(苹果11pro怎么插耳机)

  • 微信提示音怎么开启(微信提示音怎么设置)

    微信提示音怎么开启(微信提示音怎么设置)

  • 淘宝店铺授权怎样操作(淘宝店铺授权怎么弄?具体流程是什么)

    淘宝店铺授权怎样操作(淘宝店铺授权怎么弄?具体流程是什么)

  • iqoopro什么时候上市(iqoopro什么时候出的)

    iqoopro什么时候上市(iqoopro什么时候出的)

  • 苹果a2103是什么型号(苹果手机a2103啥意思)

    苹果a2103是什么型号(苹果手机a2103啥意思)

  • 快手买衣服怎么退货(快手买衣服怎么查订单)

    快手买衣服怎么退货(快手买衣服怎么查订单)

  • 锁定单元格快捷键(锁定单元格快捷键ctrl加什么)

    锁定单元格快捷键(锁定单元格快捷键ctrl加什么)

  • 块元素和行内元素及其元素转换(块元素和行内元素区别)

    块元素和行内元素及其元素转换(块元素和行内元素区别)

  • 国外收到怎么说
  • 递延所得税费用在资产负债表哪一项
  • 应税消费品是什么意思
  • 承兑汇票可以随便给人看吗
  • 捐赠的营业外收入怎么算
  • 自然人城建税减半征收
  • 员工旅游费用可以税前扣除吗?
  • 防暑降温用品计算方法
  • 预缴的税款
  • 企业所得税季报可以更正吗
  • 小规模纳税申报时间
  • 厂家给经销商的授权书
  • 开具简易计税房租发票怎样填写增值税申报表
  • 营业范围之外的产品可以出售吗
  • 以前购买的固定资产现在入账
  • 劳保费用可以开专票吗
  • 老板向公司借款用于公司经营
  • 红字发票需要盖章子吗
  • 设备租赁涉及税种
  • 7月财务报表行次三大变化
  • 未及时申报个税的理由
  • 进口报关单是什么样子的
  • 增加采购发票的方法
  • 筹资活动流入的现金是内源融资吗
  • 机动车销售发票如何认证抵扣?
  • 苹果手机键盘剪切板在哪里打开
  • 车间日常维修费用计入什么科目
  • win10锁屏界面不能输入密码
  • 如何冲回以前年度账户
  • 美元汇款怎么汇
  • 矿山机械设备租赁有限公司
  • php中strcmp
  • 合作社实际没有法人代表
  • 第4章 数据处理思维导图
  • 建造一座污水处理池投资了45万元
  • php date format
  • element组件的二次封装注册
  • 出让土地使用权和转让土地使用权的区别
  • 冰岛北部内陆景观有哪些
  • php日期时间函数
  • 我国消费税的特点
  • 公司法人和股东哪个承担的责任大
  • php 字符串处理函数
  • 中药饮片适用增值税税率
  • 图像识别算法
  • echarts图大小设置
  • cynefin框架
  • 公路修路步骤
  • 计划资产产生的股利
  • 其它应收款的处理程序
  • 实收资本认缴怎么做账,要做账吗
  • 租赁吊车服务的利润大概有多少
  • 小企业会计准则2023电子版
  • 付的房屋租金计入什么会计科目
  • 经营出租固定资产折旧费计入什么科目
  • 企业所得税季度申报表怎么填
  • 印花税记入哪个费用
  • 化妆品的成本利润率
  • 医保卡里收入和余额不一样
  • 营业外支出的用法
  • 发票几个月内可以红冲
  • 收到投资款如何声明
  • 如何学会计做账视频
  • mysql如何修改数据库名
  • mysql几天能学会
  • Hibernate4在MySQL5.1以上版本创建表出错 type=InnDB
  • sql server 用法
  • mysql 1290怎么解决
  • WZCBDLS.EXE - WZCBDLS是什么进程
  • linux gunzip
  • win10正式版多少钱
  • cocos2dx-js
  • linux中unzip解压完看不到文件
  • JS+CSS实现仿雅虎另类滑动门切换效果
  • javascript模板
  • python的读写文件
  • 上海税务开户
  • 杭州注册公司需要钱吗
  • 下列哪些表述是正确的( )
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设