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

代理

代理是一种设计模式
image
StarService.java

package com.itheima.demo4proxy;
// 明星行为接口
public interface StarService {void sing(String name);String dance();
}

Star.java

package com.itheima.demo4proxy;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Star implements StarService{private String name;@Overridepublic void sing(String name) {System.out.println(this.name + "表演唱歌:" + name);}@Overridepublic String dance() {System.out.println(this.name + "表演跳舞:魅力四射!" );return "谢谢!谢谢!";}
}

ProxyUtil

package com.itheima.demo4proxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;/*** 代理工具类:中介公司,专门负责创建代理对象并返回给别人使用*/
public class ProxyUtil {// 创建一个明星对象的代理对象返回。public static StarService createProxy(Star s){/*** 参数一:用于执行用哪个类加载器去加载生成的代理类。* 参数二:用于指定代理类需要实现的接口: 明星类实现了哪些接口,代理类就实现哪些接口* 参数三:用于指定代理类需要如何去代理(代理要做的事情)。*/StarService proxy = (StarService) Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(),s.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 用来声明代理对象要干的事情。// 参数一: proxy接收到代理对象本身(暂时用处不大)// 参数二: method代表正在被代理的方法// 参数三: args代表正在被代理的方法的参数String methodName = method.getName();if("sing".equals(methodName)){System.out.println("准备话筒,收钱20万!");}else if("dance".equals(methodName)){System.out.println("准备场地,收钱100万!");}// 真正干活(把真正的明星对象叫过来正式干活)// 找真正的明星对象来执行被代理的行为:method方法Object result = method.invoke(s, args);return result;}});return proxy;}
}

Test.java

package com.itheima.demo4proxy;import java.lang.reflect.Proxy;public class Test {public static void main(String[] args) {// 目标:创建代理对象。// 1、准备一个明星对象:设计明星类。Star star = new Star("章若楠");// 2、为章若楠创建一个专属与她的代理对象。StarService proxy = ProxyUtil.createProxy(star);proxy.sing("《红昭愿》");System.out.println(proxy.dance());}
}

proxy 变量的类型是 StarService 接口,但它指向的是 实现了该接口的动态代理实例。正因为这个实例是接口的实现类,
所以可以调用接口中定义的 sing() 和 dance() 方法,而方法的具体逻辑由动态代理类和 InvocationHandler 共同实现。
这就是动态代理的核心:通过接口生成代理对象,代理对象既遵守接口规范,又能在方法调用前后插入额外逻辑。

image

http://www.zskr.cn/news/29185.html

相关文章:

  • 双碳目标下,MyEMS 为何成为制造企业的 “刚需工具”?
  • 树上路径交
  • 点分治 / 树的重心
  • 树论大封装(直径+重心+中心)
  • 书评-谋杀黄昏
  • 徐州信息技术服务管理体系认证渠道口碑榜:聚焦机构资质、服务案例及合规性评估
  • 完整教程:【汽车篇】AI深度学习在汽车零部件外观检测——铝铸件中的应用
  • 附加数据文件失败:操作系统错误 5:“5(拒绝访问。)”。 CREATE DATABASE 失败。无法创建列出的某些文件名
  • 20251024- 使用shell脚本分库定时备份MySQL数据
  • 2025年口碑好的食品级贴体盒,榴莲贴体盒实力源头
  • 2025年诚信的液压水渠成型机,全自动水渠成型机厂家最新权威推荐榜
  • 2025年10月扬州公考面试机构全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • 2025年耐用的陶瓷纤维异性件,硅酸铝纤维陶瓷纤维实力源头加工
  • 2025年口碑好的空气能地暖管,德国品牌地暖管厂家最新TOP推荐榜
  • 2025 年接触角测量仪厂家最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析
  • 2025年诚信的不锈钢网片,304不锈钢网片厂家最新推荐排行榜
  • 2025年耐用的美狮台球杆推荐TOP生产厂家
  • 2025年知名的光伏储能柜,智能储能柜推荐TOP品牌厂家
  • ISCSI技术原理与运维实践指南
  • 2025 年搅拌机设备厂家最新推荐排行榜:聚焦磁混凝系统 / 发酵罐 / 刮泥机 / 推进式 / 脱硫侧搅拌机,精选优质企业品牌
  • 山海鲸列表组件常用功能分享
  • MyEMS 的 “智慧大脑”:能耗建模、异常预警与优化策略的技术逻辑
  • 2025 年厌氧胶源头厂家最新推荐榜,技术实力与市场口碑深度解析的优质品牌合集
  • 2025年靠谱的智能沙发,家用沙发批发销售
  • MaopaiJD 建议 国家 在每辆汽车征收 年度停车费 每辆小汽车可停在全国城市 规划停车位中
  • 2025年有实力的环保移动厕所,公共移动厕所厂家推荐及选择指南
  • 2025年耐用的14mm尼龙隔热条,20mm尼龙隔热条厂家最新TOP推荐榜
  • 2025年诚信的铝方通方管,铝方通隔断实力源头
  • 2025年正规的高压旋转接头,高速旋转接头直销制造
  • 计算机系统组成