news 2026/4/16 8:59:05

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/15 23:43:53

科伦·川宁生物与科丝发携手,共启生物制造海外新征程!

2026年2月4日&#xff0c;伊犁川宁生物技术股份有限公司与岩濑科丝发株式会社及其国内子公司科丝发国际贸易&#xff08;广州&#xff09;有限公司在科伦川宁生物上海研究院&#xff08;锐康生物&#xff09;举行战略合作签约仪式。科伦川宁生物上海研究院院长赵华博士、副总经…

作者头像 李华
网站建设 2026/4/14 19:21:32

git.exe是什么?Git命令行入门与日常使用指南

Git是一款分布式版本控制系统&#xff0c;它已经成为现代软件开发中不可或缺的基础工具。理解git.exe——即Git的命令行程序——对于高效管理代码版本、协作开发和维护项目历史至关重要。掌握其核心操作&#xff0c;能够帮助开发者从简单的代码备份进阶到专业的团队协作流程。 …

作者头像 李华
网站建设 2026/4/15 10:16:00

[STM32L5] 【STM32L562 DK试用】GUI移植并测试(五)

有成果还没摸索明白图片切换模拟表盘--------------------- 作者&#xff1a;地瓜patch 链接&#xff1a;https://bbs.21ic.com/icview-3441590-1-1.html 来源&#xff1a;21ic.com 此文章已获得原创/原创奖标签&#xff0c;著作权归21ic所有&#xff0c;任何人未经允许禁止转载…

作者头像 李华
网站建设 2026/4/12 7:59:39

java+vue基于springboot人脸识别办公OA管理系统 会议室预约系统 员工考勤任务分配系统2u257jm6-Pycharm vue django项目源码

目录项目概述技术栈核心功能项目结构部署与运行扩展性适用场景开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;项目概述 该项目基于SpringBoot、Vue和Django技术栈&#xff0c;整合了人脸识别技术&#xff0c;实现了办公自动化…

作者头像 李华
网站建设 2026/4/15 18:19:25

交稿前一晚!降AIGC平台千笔 VS Checkjie,专科生专属高效降重神器!

在AI技术迅速发展的今天&#xff0c;越来越多的学生开始借助AI工具辅助论文写作&#xff0c;以提高效率和质量。然而&#xff0c;随着学术审查标准的不断提升&#xff0c;AI生成内容的痕迹越来越容易被识别&#xff0c;导致论文AI率超标、重复率过高&#xff0c;甚至影响最终成…

作者头像 李华