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

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

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

  • 百度统计报告对数据统计的价值(百度统计好用吗)

    百度统计报告对数据统计的价值(百度统计好用吗)

  • DS是什么意思啊(ds是什么意思啊计算机)

    DS是什么意思啊(ds是什么意思啊计算机)

  • 华为支付保护中心在哪里(华为支付保护中心下载)

    华为支付保护中心在哪里(华为支付保护中心下载)

  • 苹果手机屏幕下方的灰条怎么去掉(苹果手机屏幕下面的白框怎么去掉)

    苹果手机屏幕下方的灰条怎么去掉(苹果手机屏幕下面的白框怎么去掉)

  • iqooneo3指纹在哪(iqooneo3指纹在哪里)

    iqooneo3指纹在哪(iqooneo3指纹在哪里)

  • 微信密码泄露后会有什么后果(微信密码泄露后会有什么后果自己微信支付用不了)

    微信密码泄露后会有什么后果(微信密码泄露后会有什么后果自己微信支付用不了)

  • 苹果自动关机开机怎么回事(苹果自动关机开机后只剩下10格电)

    苹果自动关机开机怎么回事(苹果自动关机开机后只剩下10格电)

  • 苹果微信步数更新滞后(苹果微信步数更新)

    苹果微信步数更新滞后(苹果微信步数更新)

  • 华为情景智能怎么打开(华为情景智能怎么才能识别车票)

    华为情景智能怎么打开(华为情景智能怎么才能识别车票)

  • 茄子视频为什么下载不了了(茄子视频为什么越往里越有轻)

    茄子视频为什么下载不了了(茄子视频为什么越往里越有轻)

  • b站手机直播怎么放音乐(b站手机直播怎么改标题)

    b站手机直播怎么放音乐(b站手机直播怎么改标题)

  • 苹果id验证码收不到怎么办(苹果id验证码收不到咋回事?)

    苹果id验证码收不到怎么办(苹果id验证码收不到咋回事?)

  • 苹果手机电池老化会出现什么情况(苹果手机电池老化充不进去电怎么办)

    苹果手机电池老化会出现什么情况(苹果手机电池老化充不进去电怎么办)

  • word艺术字样式怎么设置(word艺术字样式在哪里第几行第几列)

    word艺术字样式怎么设置(word艺术字样式在哪里第几行第几列)

  • 段后间距怎么设置12磅(段后间距怎么设置wps)

    段后间距怎么设置12磅(段后间距怎么设置wps)

  • iphone防窥屏哪里设置(防窥屏怎么设置苹果手机)

    iphone防窥屏哪里设置(防窥屏怎么设置苹果手机)

  • 一个爱奇艺vip能登几个(一个爱奇艺vip能看多久)

    一个爱奇艺vip能登几个(一个爱奇艺vip能看多久)

  • 苹果5g手机上架时间(苹果5g手机什么时候上市苹果官网)

    苹果5g手机上架时间(苹果5g手机什么时候上市苹果官网)

  • iphone8还生产吗(iphone8还生产吗?)

    iphone8还生产吗(iphone8还生产吗?)

  • 电脑温度多少为正常(电脑温度多少算合适)

    电脑温度多少为正常(电脑温度多少算合适)

  • 在win7系统中鼠标右击桌面没反应怎么办?(在windows7中,使用鼠标拖放功能)

    在win7系统中鼠标右击桌面没反应怎么办?(在windows7中,使用鼠标拖放功能)

  • apmd命令  进阶电源管理服务程序(apdl命令流手册下载)

    apmd命令 进阶电源管理服务程序(apdl命令流手册下载)

  • 海关完税凭证是交给海关么
  • 银行存款支付是借还是贷
  • 长期待摊费用摊销会计分录
  • 购入包装物计入
  • 注册公司工贸和商贸哪个更好一些
  • 购销合同没有约定期限
  • 全额抵扣的发票怎样入账
  • 小微企业营业外收入税率是多少
  • 收到政府中小企业发票
  • 建筑工程项目的全生命周期包括
  • 商品买一送一是打五折吗
  • 旧税号开出的发票能认证抵扣吗?
  • 向农户购买农产品如何入账
  • 装修期间用电
  • 预缴税款多缴了怎么办
  • 有单位购买我公司开发的房产作为“投资性房地产”,该单位需要缴纳房产税吗?
  • 旅行社成本票没有收到,怎么挂账
  • 企业出售已使用过的固定资产税率
  • 未抵扣的进项税在资产负债表里怎么填
  • 花店怎么做会计工作
  • 附加税有哪些税种
  • 合伙企业收到投资款要缴纳印花税吗
  • windows10如何关闭病毒和威胁防护设置
  • win10 专业版 企业版
  • 定向增发是什么融资方式
  • 一般纳税人怎么算税
  • PHP:oci_new_descriptor()的用法_Oracle函数
  • linux zmodem
  • 小规模纳税人需要缴纳个人所得税吗
  • PHP:imagepsslantfont()的用法_GD库图像处理函数
  • 其他应收款超过一年是12个月吗?
  • 往来指哪些科目
  • 计提房产税会计分录怎么做账
  • 注册资金不能到位怎么办
  • 社保缴费基数差1000一般差多少?
  • 账户维护费计入什么会计科目
  • 前端实现文件下载列表
  • 出口抵减内销产品应纳税额怎么结转
  • 财务管理中的折现率是指什么
  • 哪些税费可以抵扣
  • 境外捐赠入账
  • 公司转让注册海外公司
  • 固定资金作为固定资产的货币表现的特点
  • 计提坏账准备的方法
  • 个人社保应不应该缴纳
  • 核定征收企业有没有自然人电子税务
  • 应付账款借方余额负数表示什么
  • 单位买的职工社保自己可以去社保局领卡吗
  • 投资性房地产的定义
  • 应收账款多久收不回来作为坏账
  • 半成品会计处理流程
  • 机器设备一般折旧几年
  • 企业被收购会产生哪些税
  • 办公室租金发票可以扺增值税吗
  • 税收返还如何做账
  • 办理三证合一多久能拿到
  • 营业执照注册资金变更
  • 登录系统错误
  • player文件怎么打开
  • windows8能免费升10吗
  • windows 10 mobile下载
  • linux支持哪些类型的设备
  • linux中安装命令
  • cocos2d-x window实现鼠标移动 键盘事件
  • 创建nodejs项目的步骤
  • 利用JQuery实现datatables插件的增加和删除行功能
  • 自动断开网络共享怎么办
  • 自定义progressbar
  • Python装饰器入门学习教程(九步学习)
  • unity5.4.0
  • python数据的概念
  • python 元类的作用
  • python定制函数
  • 我国历年财政支出总额
  • 月收入28000的个税
  • 沈阳车辆税务管理局电话
  • 河南省地方税务局公告2017年第4号
  • 个人所得税是先交还是后交
  • 新办纳税人是什么多久之内
  • 西安医疗保险官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设