news 2026/4/18 10:55: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/4/18 8:56:40

基于深度学习YOLOv12的传送带缺陷识别检测系统(YOLOv12+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

一、项目介绍 本文基于YOLOv12深度学习算法&#xff0c;设计并实现了一种高效的传送带缺陷识别检测系统。系统针对传送带表面常见的四类缺陷&#xff08;堵塞、裂缝、异物、孔洞&#xff09;进行自动化检测&#xff0c;通过构建包含1860张训练图像、318张验证图像和167张测试图…

作者头像 李华
网站建设 2026/4/18 8:07:09

AI教材写作全流程揭秘!掌握方法,达成低查重编写目标!

谁没有在编写教材时遇到过框架构建的难题呢&#xff1f;面对一片空白的文档&#xff0c;常常会陷入深思&#xff0c;甚至拖延半小时无从下手——究竟是先讲解概念还是提供案例&#xff1f;章节的安排应该根据逻辑还是课时&#xff1f;经过多次修改的提纲&#xff0c;要么无法达…

作者头像 李华
网站建设 2026/4/18 8:53:29

揭秘低查重AI教材编写:高效工具与实用技巧助你快速完成教材

AI教材写作工具推荐 在准备编写教材时&#xff0c;选择合适的工具简直像是一场“纠结的斗争”&#xff01;如果使用办公软件&#xff0c;功能就会显得极为简单&#xff0c;框架搭建和格式调整还得逐步自己来完成&#xff1b;而用专业的教材编写工具&#xff0c;操作却往往复杂…

作者头像 李华
网站建设 2026/4/18 5:37:35

canvas 优化有哪些具体方法?如何减少内存占用?

在Canvas开发中&#xff0c;性能优化是保证复杂图形应用流畅运行的关键。经过多年的项目实践&#xff0c;我发现合理的优化策略能够将渲染效率提升数倍&#xff0c;特别是在移动端和复杂动画场景下。本文将分享几个经过验证的核心优化方法&#xff0c;这些方法直接关系到用户体…

作者头像 李华
网站建设 2026/4/18 5:40:29

拖延症福音!自考必备降AI网站 —— 千笔·专业降AIGC智能体

在AI技术日益渗透学术写作的当下&#xff0c;越来越多的学生和研究者开始依赖AI工具提升写作效率。然而&#xff0c;随着查重系统对AI生成内容的识别能力不断提升&#xff0c;如何有效降低AI率和重复率&#xff0c;已成为论文撰写过程中不可忽视的挑战。面对市场上琳琅满目的降…

作者头像 李华