博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hadoop21---使用代理修改List,代理流程
阅读量:5962 次
发布时间:2019-06-19

本文共 1665 字,大约阅读时间需要 5 分钟。

package cn.itcast_05_proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.util.ArrayList;import java.util.List;public class ListDemo {    @SuppressWarnings({ "rawtypes", "unchecked" })    public static void main(String[] args) throws Exception {        final List list = new ArrayList();        //这是被代理的        Object oo = Proxy.newProxyInstance(List.class.getClassLoader(),                list.getClass().getInterfaces(),new InvocationHandler() {                    public Object invoke(Object proxy, Method method, Object[] args)                            throws Throwable {                        System.err.println("加入一个对象:");                        Object returnValue = method.invoke(list, args);//反射                        System.err.println("加入完成。。。。");                        if(method.getName().equals("size")){                            return 100;                        }                        return returnValue;                    }                });        List list2 = (List) oo;        list2.add("aaa");        list2.add("bbb");                System.err.println("size:"+list2.size()+","+list.size());//100,2        //为什么调用3次?        //list2.size()这个也调用    }}

 

代理实现流程:1、书写代理类和代理方法,在代理方法中实现代理Proxy.newProxyInstance2、代理中需要的参数分别为:被代理的类的类加载器soneObjectclass.getClassLoader(),被代理类的所有实现接口new Class[] { Interface.class },句柄方法new InvocationHandler()3、在句柄方法中复写invoke方法,invoke方法的输入有3个参数Object proxy(代理类对象), Method method(被代理类的方法),Object[] args(被代理类方法的传入参数),在这个方法中,我们可以定制化的开发新的业务。4、获取代理类,强转成被代理的接口5、最后,我们可以像没被代理一样,调用接口的认可方法,方法被调用后,方法名和参数列表将被传入代理类的invoke方法中,进行新业务的逻辑流程。        原业务接口IBoss

 

转载地址:http://unjax.baihongyu.com/

你可能感兴趣的文章
《zw版·Halcon-delphi系列原创教程》halconxlib控件列表
查看>>
List与数组的相互转换
查看>>
Computer Science Theory for the Information Age-4: 一些机器学习算法的简介
查看>>
socketserver模块使用方法
查看>>
json模块
查看>>
各型号英特尔CUP的功率
查看>>
scanf()中的%c 不能正常输入的问题
查看>>
常见排序算法及对应的时间复杂度和空间复杂度
查看>>
业界 | 在德州叫一辆自动驾驶车,Drive.ai安排了7辆无人车展开真实试验
查看>>
实时数据平台设计:解决从OLTP到OLAP实时流转缺失
查看>>
三家公司在SD-WAN方面的新动作
查看>>
C#在PDF中如何以不同颜色高亮文本
查看>>
在同一页面显示多个JavaScript统计图表
查看>>
Mac电脑Tomcat下载及安装(详细)MAC在Eclipse里配置tomcat
查看>>
多线程之-----------定时器
查看>>
C#语法——反射,架构师的入门基础。
查看>>
Beego Models 之 一
查看>>
代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能
查看>>
Kubernetes部署的最佳安全实践
查看>>
理解C语言——从小菜到大神的晋级之路(8)——数组、指针和字符串
查看>>