代理模式 - 动态代理

news/2024/9/23 16:45:37

动态代理的API

Proxy 动态代理类

  • 生成代理对象:Proxy.newProxyInstance( 类加载器接口数组处理器 )
    • 类加载器:对象.getClass( ).getClassLoader( )
    • 接口数组-被代理类的所有接口:被代理对象.getClass( ).getInterfaces( )
    • 处理器:代理对象调用方法时,会被处理器拦截

InvocationHandler 处理器接口

  • 处理器的作用:拦截方法的执行
  • 代理对象调用方法时,必须经过处理器的invoke( )方法

动态代理的角色分析


动态代理的模板代码


// 动态代理公式
// T t=(T)Proxy.newProxyInstance(类加载器,接口数组,处理器);T t=(T)Proxy.newProxyInstance(被代理对象.getClass().getClassLoader(),被代理对象.getClass().getInterfaces();(Object obj, Method method, Object[] args)->{//方法执行前Object result = method.invoke(代理对象,args);//方法执行后return result;}
);
t.接口的方法() ;

应用实例

调用List集合remove( )时,删除指定的元素(包含重复的元素)

public static void main(String[] args1) {//需求:调用List集合remove()时,删除指定的元素,包含多个重复的元素//1.创建被代理对象List list = new ArrayList();Collections.addAll(list, 2, 3, 5, 2, 7, 2, 9,5, 6);System.out.println("调用方法前:"+list);//2.通过Proxy类 创建代理对象List listProxy=(List) Proxy.newProxyInstance(list.getClass().getClassLoader(),list.getClass().getInterfaces(),(Object obj, Method method, Object[] args)->{Object invoke = null;//目标方法的返回值,如果没有,则不需要写if("remove".equals(method.getName())){//调用remove方法时,删除所有指定的重复元素while(true){if (!list.contains(args[0])) {break;}list.remove(args[0]);}}else{//其它方法,正常执行invoke = method.invoke(list, args);}return invoke;});//3.代理对象调用方法listProxy.remove(2);System.out.println("调用方法后:"+list);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/63823.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

9.23制作二维码

二维码在教育领域的应用日益广泛,如在线教育、校园导览等。学生可以通过扫描二维码,获取课程资料、校园地图等信息。这个海报上的二维码是连接到课文我变成了一棵树,直接看到文字内容,方便学生学习。

高级语言程序设计课程第一次个人作业 102400226 石华波

2024高级语言程序设计:https://edu.cnblogs.com/campus/fzu/2024C 高级语言程序设计课程第一次个人作业:https://edu.cnblogs.com/campus/fzu/2024C/homework/13264 学号:102400226 姓名:石华波

专为工程地质领域安全监测而设计,BWII型广播预警遥测系统助您实现全面监测!

专为工程地质领域安全监测而设计,BWII型广播预警遥测系统助您实现全面监测!BWII型广播预警遥测系统是一款新型的雨量预警监测仪,具备多通道和多类型传感器接入功能。该系统能够定时采集和发送电压、电流、数字和脉冲等信息,同时结合事件驱动的工作方式,以高频传感扫描和定…

2024 ByteCTF

ByteCTF 极限逃脱 题目描述:本题需要通过动态调试分析出要输入的内容,可能在某些地方会有提示出现。 这是一个IOS逆向,因为没有设备只能静态分析 流程和安卓逆向大概一致 解压拖进ida 提示输入flag格式 根据"-"进行切割其实就是uuid格式,正确输入后有一个赋值操…

网络流学习记录

CCPC网络赛 G Problem G. 疯狂星期六 Input file: standard input    Output file: standard output Time limit: 1 second      Memory limit: 256 megabytes yyq 和他的朋友们一共 n 个人(编号为 1 到 n ,yyq 编号为 1)去某饭店吃疯狂星期六。第 i 个人初始手中有 a…

PARTIII-Oracle事务管理-事务

10. 事务 10.1. 事务简介 事务是包含一个或多个SQL语句的逻辑、原子工作单元。事务将SQL语句分组,使它们要么全部提交,这意味着它们被应用到数据库中,要么全部回滚,这意味着它们从数据库中被撤销。Oracle数据库为每个事务分配一个唯一的标识符,称为事务ID。 所有Oracle事务…

BPM(业务流程管理)的最佳开源工具

探索最佳开源工具如何优化不同行业的业务流程管理(BPM)场景。在上个月的文章中,我们探讨了 BPM 并总结了构建 BPM 应用程序的三大步骤。 什么是BPM,如何构建一个BPM App? - NocoBase 然而,在各行各业中,BPM 面临着各自独特的挑战。在教育领域,优化招生管理流程和提升学…

谷歌发布新 RL 方法,性能提升巨大;苹果前设计总监正与 OpenAI 合作开发 AI 设备丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的会议」,但内容仅代表编辑的…