动态代理 --java学习笔记

什么是动态代理?

当一个类的很多方法都存在重复冗杂的部分,就可以使用代理来处理那些重复部分的任务,到了各自的实现部分再丢回给原方法处理,同时也可以提高方法的扩展性,而动态则是指在运行时动态地创建代理对象,动态的调用方法

如何为Java对象创建一个代理对象?

java.lang.reflect.Proxy类:提供了为对象产生代理对象的方法:

代码演示动态代理的创建与使用:
Star接口:记录代理的方法

package com.zeyu.proxy;public interface Star {String sing(String name);void dance();
}

原对象

package com.zeyu.proxy;public class SuperStar implements Star{private String name;public SuperStar(String name){this.name = name;}public String sing(String name){System.out.println(this.name + "正在唱:" + name);return "谢谢大家!";}public void dance(){System.out.println(this.name + "正在跳舞~");}
}

代理

package com.zeyu.proxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class ProxyUtil {public static Star createProxy(SuperStar superStar) {/** 参数一:用于指定一个类加载器* 参数二:指定生成的代理长什么样子,也就是有哪些方法* 参数三:用来指定生成的代理对象要感什么事情* */Star starProxy = (Star) Proxy.newProxyInstance(SuperStar.class.getClassLoader(), new Class[]{Star.class}, new InvocationHandler() {@Override   //回调方法public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {/** 三个形参:* proxy:动态生成的代理类* method:与代理类对象调用的方法相对应* args:当前method方法的参数* *///代理对象要做的事情,在这里写代码if (method.getName().equals("sing")) {System.out.println("准备话筒,收钱20万");} else if (method.getName().equals("dance")) {System.out.println("准备场地,收钱100万");}return method.invoke(superStar, args);}});return starProxy;}
}

测试类:

package com.zeyu.proxy;public class Test {public static void main(String[] args) {SuperStar zeYu = new SuperStar("zeYu");Star proxy = ProxyUtil.createProxy(zeYu);String rs = proxy.sing("不为谁而作的歌");System.out.println(rs);proxy.dance();}
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/809959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Acrobat Pro DC 2023 for mac直装激活版 pdf编辑处理工具

Acrobat Pro DC 2023 for Mac是一款功能强大的PDF编辑器,为用户提供了全面且高效的PDF处理体验。 软件下载:Acrobat Pro DC 2023 for mac直装激活版下载 首先,它支持用户从现有文档创建PDF,或者将其他文件格式如图片、网页等轻松转…

个人博客项目笔记_05

1. ThreadLocal内存泄漏 ThreadLocal 内存泄漏是指由于没有及时清理 ThreadLocal 实例所存储的数据,导致这些数据在线程池或长时间运行的应用中累积过多,最终导致内存占用过高的情况。 内存泄漏通常发生在以下情况下: 线程池场景下的 ThreadL…

牛客 NC252 多数组中位数【中等 模拟 Java,Go】

题目 题目链接: https://www.nowcoder.com/practice/b6bb0bce88894108bfc23e9b7b012420 思路 模拟,2数组合并一个数组helphelp长度为奇数,直接取中间值,为偶数,中间2个值,哪个小返回哪个参考答案Java imp…

结合ArcGIS+SWAT模型+Century模型:流域生态系统水-碳-氮耦合过程模拟

原文链接:结合ArcGISSWAT模型Century模型:流域生态系统水-碳-氮耦合过程模拟https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&tempkeyMTI2NV9sMGRZNUJoVkNVc1ZzSzRuMl9XXzhqX0R3cXpESWFwM1E4cFY4ejNqWFh3VUl0dlZkNWk4b20ydFdFTy1xS2ZObGN0Z0ZXSjly…

tcp接受命令执行并回显

为了实现循环执行命令并能够多次从TCP客户端接收命令,您需要对上面的代码进行一些修改。下面是一个修改后的示例,它将在接收到新的TCP连接后进入一个循环,不断地读取命令、执行命令,并将结果发送回客户端,直到客户端断…

【AcWing】蓝桥杯集训每日一题Day27|矩阵乘法|快速幂|205.斐波那契(C++)

205.斐波那契 205. 斐波那契 - AcWing题库难度:中等时/空限制:1s / 64MB总通过数:3220总尝试数:4747来源:《算法竞赛进阶指南》算法标签数学知识矩阵乘法快速幂 题目内容 在斐波那契数列中, F i b 0 0 …

【学习路径】AI入门路线分享

近期整理飞书文档,一些权限被关掉了。看好多人在申请访问这个飞书文档,于是把它单独拿出来放在CSDN上,供大家参考~ 原视频地址:AI:从小白到入门,超详细人工智能成长路径分享_哔哩哔哩_bilibili 文章目录 1.…

OpenStack (T)部署trove

环境:Openstack(T) CentOS Linux release 7.9.2009 (Core) 正文: 1.控制节点安装trove软件包 # yum install openstack-trove-guestagent openstack-trove python-troveclient openstack-trove-ui –y2.创建数据库&#xff0c…

2024-04-12 问AI: 在深度学习中,什么是参数,什么是超参数?

文心一言 在深度学习中,参数和超参数是两个非常重要的概念,它们在模型的训练和调优过程中起着关键的作用。以下是它们的基本定义和区别: 参数(Parameters): 参数是模型在训练过程中学习的变量。它们是从数…

C++11 设计模式3. 工厂方法模式

简单工厂模式的遗留问题 //从上面的代码可以看到,简单工厂模式确实实现了new 出来具体对象, 和 业务逻辑的分离, //但是不符合 "开闭原则" //"开闭原则"说的是代码扩展性问题——对扩展开放,对修改关…

如何在OceanBase v4.2 中快速生成随机数据

在使用传统数据库如 MySQL 和 Oracle 时,由于缺乏多样化的随机数据生成方案,或者实现成本过高,构造随机数据的开发成本受到了影响。OceanBase在老版本中虽然有相应的解决方案,但语法复杂和性能较差等问题仍然存在。 现在&#xf…

【漏洞复现】润乾报表平台 InputServlet接口处存在任意文件上传漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

报错[Vue warn]: $attrs is readonly. $listeners is readonly.

可能是加载了多个Vue实例导致,解决方法 vue.config.js chainWebpack: config > {config.resolve.alias.set(, resolve(src)).set(vue, resolve(./node_modules/vue))},然后重新运行项目即可

【.net core】【sqlsugar】联表查询与实体自动映射语法

官方文档:联表查询、关联查询、JoinTable、连表查询、Left Join - SqlSugar 5x - .NET果糖网 Join用法:语法糖2 Select 用法:自动映射 //类A 数据库字段与类成员一致 public class ClassA{//主键IDpublic int id{get;set;}//名称public st…

车内AR互动娱乐解决方案,打造沉浸式智能座舱体验

美摄科技凭借其卓越的创新能力,为企业带来了革命性的车内AR互动娱乐解决方案。该方案凭借自研的AI检测和渲染引擎,打造出逼真的数字形象,不仅丰富了车机娱乐内容,更提升了乘客与车辆的互动体验,让每一次出行都成为一场…

C语言 循环控制——while和do-while语句

目录 whiel语句 do-while语句 while与do-while的区别 计数控制的循环 ​编辑标记控制的循环 whiel语句 do-while语句 while与do-while的区别 计数控制的循环 标记控制的循环

怎么构建临床知识图谱?

怎么构建临床知识图谱? 构建临床知识图谱传统临床指南的局限性决策的不确定性和个体差异构建真实临床知识图谱构建真实世界的临床事件图谱基于书本抽取的知识来自哪些书本?如何保证这些知识是最新的知识?如何不断融入最新的医学研究进展,从而…

挖掘未来:私有LTE/5G网络驱动智慧矿山的自动化

私有LTE/5G网络为世界上一些最偏远的角落提供无线连接。如果没有无线通信网络,各行业就无法满足增加产量、降低运营成本和减少环境破坏的需求。 在本案例研究中,我们着眼于自动化如何改变无线网络的动态。智慧矿山要求运营商无缝集成多个系统和应用程序…

探索Web3的奇迹:数字时代的新前景

在数字化时代的潮流中,我们不可避免地迎来了一个全新的篇章——Web3时代的到来。在这个时代中,区块链技术作为数字化世界的核心,正在重塑着我们的生活方式、经济模式以及社会结构。在Web3时代,我们将目睹着一个以去中心化、透明化…

32.WEB渗透测试-数据传输与加解密(6)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:31.WEB渗透测试-数据传输与加解密(5) 关于discuz3.5的源码内容和…