A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© rfshao 初级黑马   /  2019-6-21 14:08  /  633 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//创建真实对象
        ComputerImpl computer = new ComputerImpl();

        //创建代理对象
        Computer proxy_computer =(Computer)Proxy.newProxyInstance(computer.getClass().getClassLoader(),
                computer.getClass().getInterfaces(), new InvocationHandler() {

                    public Object invoke(Object proxy, Method method, Object[] args) throws InvocationTargetException, IllegalAccessException {

                        //如果方法名等于想要加强的方法就对方法进行加强
                        if ("saleComputer".equals(method.getName())) {

                            //从args参数数组中获取要修改的参数并修改
                            double money = (double) args[0] * 1.1;

                            //用反射的方式执行方法
                            String s = (String) method.invoke(computer, money);

                            return s;
                            //如果不是要修改的方法,就按原参数执行
                        } else {
                            Object obj = method.invoke(computer, args);
                            System.out.println(obj);
                            return obj;
                        }

                    }
                });

        //用代理对象调用方法
        System.out.println(proxy_computer.saleComputer(5000));
//        System.out.println(proxy_computer.show() == null);
        proxy_computer.show();
        //用真是对象调用方法
        System.out.println(computer.saleComputer(5000));
        computer.show();

//另,getParameterMap()得到的map是被锁定的,不能更改里面的值,如果用proxy要更改,需另new一个map

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马