美文网首页
七、动态代理

七、动态代理

作者: blank_white | 来源:发表于2020-07-19 20:58 被阅读0次

    七、动态代理

    package org.example.domain;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    /**
     * 动态代理测试
     */
    public class Cat implements JumpAble{
        String name;
    
        public Cat(String name) {
            this.name = name;
        }
    
        @Override
        public void jump() {
            System.out.println("小猫"+this.name+"跳起来了");
        }
    
    
        public static void main(String[] args) {
            Cat cat=new Cat("咪咪");
            // 参数 1 需要一个能加载这些接口的类加载器
            // 参数 2 指明代理了哪些接口
            // 参数 3 指定自己实现的 InvocationHandler
            JumpAble catJummpab= (JumpAble) Proxy.newProxyInstance(JumpAble.class.getClassLoader(), new Class[]{JumpAble.class},new MyInvocatioHandler(cat));
            catJummpab.jump();
        }
    }
    
    interface JumpAble{
    
        void jump();
    }
    
    class MyInvocatioHandler implements InvocationHandler{
    
        Object target;
    
        public MyInvocatioHandler(Object target) {
            this.target = target;
        }
    
        /**
         * 使用代理对象执行任何方法都是在执行这个方法
         * @param proxy 生成的代理实例对象
         * @param method 执行的方法
         * @param args 方法参数
         * @return
         * @throws Throwable
         */
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            
            System.out.println("我是动态代理");
            method.invoke(target,args);
            return null;
        }
    }
    

    相关文章

      网友评论

          本文标题:七、动态代理

          本文链接:https://www.haomeiwen.com/subject/vglqkktx.html