• Java-基于JDK的动态代理


    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11686615.html

      简单的记录一下Java中自带动态代理的用法.

      准备材料: 

        1.一个接口

        2.一个实现了接口的类

        3.一个动态代理类

        4.一个测试类

    package dynamicProxy;
    
    /**
     * 生物
     */
    public interface Creature {
        void move();
    }
    package dynamicProxy;
    
    /**
     * 人类
     */
    public class Human implements Creature {
    
        @Override
        public void move() {
            System.out.println("human is move! ");
        }
    }
    package dynamicProxy;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    /**
     * 生物的动态代理类
     */
    public class DynamicProxyCreature implements InvocationHandler {
    
        private Creature creature;
    
        public Object newInstance(Creature creature){
            this.creature = creature;
            return Proxy.newProxyInstance(this.creature.getClass().getClassLoader(), this.creature.getClass().getInterfaces(), this);
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            System.out.println("代理部分开始工作了......");
            this.creature.move();
            System.out.println("代理部分结束工作了......");
            return null;
        }
    }
    package dynamicProxy;
    
    /**
     * 测试一下
     */
    public class MainTest {
        public static void main(String[] args) {
            DynamicProxyCreature dynamicProxyCreature = new DynamicProxyCreature();
            Creature obj = (Creature) dynamicProxyCreature.newInstance(new Human());
            obj.move();
        }
    }

      通过Proxy生成一个新的对象, 再调用对象方法时可以在方法前后进行另外的操作处理, 调用的对象也是基于接口的,而不是实现类的.

  • 相关阅读:
    webpack 学习
    文件操作
    关于列表remove的操作和字符串split的操作新领悟
    深浅拷贝和基础类型补充
    小数据池和编码
    字典和集合
    列表和元组
    字符串理论
    递归遍历多层列表
    基本数据类型和操作
  • 原文地址:https://www.cnblogs.com/fanerwei222/p/11686615.html
Copyright © 2020-2023  润新知