news 2026/9/3 6:34:16

Java动态代理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java动态代理

Java动态代理

一、概述

二、具体实现

2,1创建被代理对象(同时里面包含了相关的方法)

packagecom.itheima.mydynamicproxy1.zj;publicclassBigStarimplementsStar{// 先是创建一个类privateStringname;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicBigStar(Stringname){this.name=name;}publicBigStar(){}// 然后是有唱歌和跳舞的方法@OverridepublicStringsing(Stringname){System.out.println(this.name+"正在唱"+name);return"谢谢";}@Overridepublicvoiddance(){System.out.println(this.name+"正在跳舞");}}

2.2创建接口(里面是用来定义要代理的方法)

packagecom.itheima.mydynamicproxy1.zj;publicinterfaceStar{publicabstractStringsing(Stringname);publicabstractvoiddance();}

2.2创建用于生成代理对象的类(重点)

packagecom.itheima.mydynamicproxy1.zj;importjava.lang.reflect.InvocationHandler;importjava.lang.reflect.Method;importjava.lang.reflect.Proxy;publicclassProxyUtill{// 下面静态方法的作用是给一个对象创建代理对象// 其中方法传递的形象就是需要代理的对象// 首先是创建静态方法publicstaticStarcreateProxy(BigStarbigStar){// 下面这是源码:// public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)// 其中第一个参数是类加载器,用于加载代理类// 第二个参数是用来指定代理类长成什么样,相当于是传递过来的属性// 第三个参数就是指定代理类干什么,也就是执行哪些方法// 那么下面就是逐一进行// 获取类加载器// 这句代码实际上做了两件事:1,.获取先找到是谁将当前类加载到内存。2.再次使用这个类加载器来加载我们的代理Starstar=(Star)Proxy.newProxyInstance(// 这就是上面的参数一ProxyUtill.class.getClassLoader(),// 类加载器干什么实际上是封装在接口当中的newClass[]{Star.class},newInvocationHandler(){@OverridepublicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{// 下面就是在判断这个类了if("sing".equals(method.getName())){// 下面就是代理做的一些准备工作System.out.println("准备话筒,收钱");}elseif("dance".equals(method.getName())){System.out.println("准备场地,收钱");}// 去找大明星唱歌或者跳舞// 指定是哪个明星,进行什么动作returnmethod.invoke(bigStar,args);}});//返回代理好的对象即可returnstar;}}

这里面其实分清楚层次再加上看看源码其实并不难理解,首先整体上是通过createProxy这个静态方法来生成代理对象,需要传递被代理对象作为形参,其底层又是运用Proxy的newProxyInstance方法。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 21:25:43

AI写论文哪个软件最好?毕业季实测:虎贲等考AI让盲审通过率翻倍

“改了5版开题还被导师驳回”“文献引用一半查不到源头”“实证分析卡了1个月还没头绪”“查重率35%降不下来”——毕业季的图书馆里&#xff0c;每一位学子都在经历毕业论文的“渡劫之旅”。当AI写作工具成为刚需&#xff0c;“AI写论文哪个软件最好”的灵魂拷问&#xff0c;成…

作者头像 李华
网站建设 2026/9/2 22:14:18

AI教材生成新趋势!低查重AI写教材工具,开启高效编写之旅!

教材编写难题与 AI 工具解决方案 编写教材时遇到的格式问题&#xff0c;几乎是所有编写人员共同的难题&#xff1a;标题使用哪种字号、层级该如何划分&#xff1f;参考文献是依据 GB/T7714 还是各出版社的特别标准&#xff1f;习题的排版是单栏还是双栏&#xff1f;这些多样化…

作者头像 李华
网站建设 2026/9/2 22:15:05

学术专著不用愁:AI专著写作工具,高效打造专业学术作品

写学术专著的挑战&#xff0c;不仅仅在于“能够写出来”&#xff0c;更在于“能够出版并获得认可”。在出版行业&#xff0c;学术专著的受众群体较小&#xff0c;出版社对选题的学术价值以及作者的学术声誉设定了很高的标准。许多书稿即使完成了初稿&#xff0c;也常常因为“缺…

作者头像 李华
网站建设 2026/9/3 3:12:25

矿区无人驾驶矿车局部规划的算法有哪些?

矿区无人驾驶矿车局部轨迹规划&#xff08;Local Planning&#xff09;以非结构化道路、重载、强动力学约束、高安全冗余为核心&#xff0c;算法分为采样类、优化类、学习类、工程融合架构四大类&#xff0c;下面按落地成熟度、适用场景分类整理&#xff0c;附矿车场景适配改造…

作者头像 李华
网站建设 2026/9/2 23:01:53

新手也能看懂的SMT避坑指南!

眺望电子专注嵌入式处理器模组的研发与应用&#xff0c;服务于企业产品项目研发落地。因此&#xff0c;提供基于飞书系统的核心板二次开发资料包&#xff0c;其中硬件部分则包含接口载板原理图与PCB封装库等等。在使用核心板设计载板的SMT贴片生产环节&#xff0c;我们常会遇到…

作者头像 李华
网站建设 2026/9/2 22:16:39

FPC面板利用率优化:降本增效的关键技巧

FPC 电路板的生产成本&#xff0c;很大程度上取决于面板利用率。FPC 生产是在整张基材面板上排版&#xff0c;利用率越高&#xff0c;单块 FPC 的成本越低。很多厂家因为排版不合理、设计不优化&#xff0c;导致面板利用率只有 50%-60%&#xff0c;浪费大量材料&#xff0c;成本…

作者头像 李华