hadoop21---使用代理修改List,代理流程

Posted 672530440

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hadoop21---使用代理修改List,代理流程相关的知识,希望对你有一定的参考价值。

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

 

以上是关于hadoop21---使用代理修改List,代理流程的主要内容,如果未能解决你的问题,请参考以下文章

使用Nginx+Lua代理Hadoop HA

hadoop 2.6.2,mkdir:无法创建代理提供程序 null

在 Qt5 中使用 QMediaPlayer 播放流时使用代理? [复制]

通过 Node.js 代理传输 MJPEG 流

当我从 SQL Server 代理运行 Python 脚本时,为啥它会失败?

Java4lambda,Stream流,File类,乱码,流,Properties,Tcp,文件上传/UUID/Junit,反射/注解,类加载器,代理/模板/单例/工厂,xml