当前位置: 首页 > news >正文

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方法。

http://www.jsqmd.com/news/349345/

相关文章:

  • AI教材写作必备:掌握这些技巧,低查重教材轻松搞定
  • java+vue基于springboot摄影师作品分享交流平台 摄影服务预约平台_1g9fl67g-Pycharm vue django项目源码
  • 基于深度学习YOLOv11的晶圆体缺陷检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)
  • 电路设计软件解惑篇,这些电路设计软件难题你都知道吗
  • AI写教材必备!掌握低查重技巧,让教材生成又快又好
  • 科研绘图“卡壳”72小时?虎贲等考AI:5分钟生成期刊级图表,数据可视化直接见刊
  • AI专著生成没烦恼!实用工具推荐,写专著也能事半功倍
  • [STM32L5] STM32L562E-DK开发板的BSP学习
  • AI专著写作新玩法:精选工具解析,开启高效专著创作新体验!
  • 2026年AI Agent爆发元年:为何“实在Agent”能成为企业落地的首选数字员工?
  • [STM32L5] 【STM32L562 DK试用】基础外设体验
  • 充电桩品牌哪个更可靠?2026年充电桩推荐与排名,解决耐用性与智能管理核心痛点 - 品牌推荐
  • java+vue基于springboot旅游攻略 克州旅游网站的景区酒店门票预订系统_y36e99h1-Pycharm vue django项目源码
  • 问卷设计还在 “凭感觉”?虎贲等考 AI:告别无效提问,让数据采集精准到 “秒出结论”
  • [STM32L5] 【STM32L562 DK试用】GUI移植并测试(五)
  • 测试本地服务是否通
  • 横评后发现,AI论文工具千笔·专业学术智能体 VS 锐智 AI 更适合专科生
  • 流延机加工厂哪家合作案例多,诺达机械值得关注 - 工业设备
  • 2026年了,你的AI多智能体Agent还在“裸奔”?实测揭秘为何90%的Agent死在落地前夜
  • 交稿前一晚!降AIGC平台千笔 VS Checkjie,专科生专属高效降重神器!
  • 栅格多智能体协同爆发:2026年实在Agent如何以“屏幕语义”定义数字员工新标准
  • 宏海机器人客户认可吗?工业自动化设备选购要点大揭秘 - 工业推荐榜
  • 拖延症福音!自考必备降AI网站 —— 千笔·专业降AIGC智能体
  • java+vue基于springboot忘忧传媒直播管理系统 热门主播推荐系统oeuq4630-Pycharm vue django项目源码
  • 充电桩品牌哪个更可靠?2026年充电桩推荐与排名,解决网络覆盖与支付体验核心痛点 - 品牌推荐
  • java+vue基于springboot宠物店活动报名系统 宠物领养管理系统_nz2f939x
  • 好写作AI:外文论文写作的AI帮手——你的专属“语言与文化双重新手村”通关向导
  • 新手也能看懂的SMT避坑指南!
  • java+vue基于springboot宠物美容医院预约管理系统的设计与实现_g97vcb5w
  • 分析包头一次成型河渠滑膜衬砌机选购要点,费用怎么算? - 工业品网