zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    HBase入门笔记(四)完全分布式HBase集群安装配置
    is not in sudoer file
    PHP学习之八:执行运算符与字符加一
    Windows Phone 7回车键获取
    Asp.Net重定向
    WindowsPhone7开发之 Push+Notification
    Windows phone 7开发之(页面间跳转与传值)
    Windows Phone 7开发者注册Marketplace
    Windows Phone7开发之 容器控件
    Windows Phone7开发之 其他控件
  • 原文地址:https://www.cnblogs.com/yaowen/p/9028260.html
Copyright © 2011-2022 走看看