zoukankan      html  css  js  c++  java
  • 动态代理的一些问题。

      在学习动态代理的过程中,发现动态代理代理的类必须需要实现一个接口,此外,处理器中的invoke方法,在对代理产生的对象调用任何方法的时候,均会执行,但是method代表的是“对应与在代理实例上调用的接口的方法的Method实例”,因此Method对象调用,仅在调用接口方法的情况下,有结果,对于以下示例代码:

      

    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    public class Demo3 {
        public static void main(String[] args) {
            Dog dd=new Dog();
            MyHandler mh=new MyHandler(dd);
            Object pro=Proxy.newProxyInstance(dd.getClass().getClassLoader(),dd.getClass().getInterfaces(), mh);
            System.out.println(pro);
            Animal an=(Animal)pro;
            an.eat();
        }
    }
    class MyHandler implements InvocationHandler {
        private Object target;
        
        public MyHandler(Object target) {
            super();
            this.target = target;
        }
    
        @Override
        public Object invoke(Object proxy, Method method,
                Object[] args) throws Throwable {//这个方法在每调用一次方法的时候都会执行
            System.out.println("------代理中-------");
            method.invoke(target, args);    //这个方法只有在调用的是接口的方法的时候才会执行
            System.out.println("-----代理完成-------");
            return null ;
        }
        
    }
    interface Animal {
        public void eat();
        public void work();
    }
    class Dog implements Animal {
    
        @Override
        public void eat() {
            System.out.println("狗在吃东西");
        }
    
        @Override
        public void work() {
            System.out.println("狗在走");
        }
        
    }

    输出结果为:

    ------代理中-------
    -----代理完成-------
    null
    ------代理中-------
    狗在吃东西
    -----代理完成-------

    这是因为在调用System.out.println方法的时候实际调用了代理对象的toString方法,因此invoke方法返回了空,并被打印了出来。

    加油
  • 相关阅读:
    Solidity字符串类型
    Solidity中如何判断mapping中某个键是否为空呢?
    CentOS7 内核模块管理
    Centos7 搭建pptp服务器
    Python实现批量执行华为交换机脚本
    CentOS7 硬盘检测
    华为交换机SOCK CPU占用率高处理方法
    CentOS7 iptables安装及操作
    CentOS7 修复grub.cfg文件
    CentOS7 修复MBR引导
  • 原文地址:https://www.cnblogs.com/hlhdidi/p/5575888.html
Copyright © 2011-2022 走看看