• Java动态代理


    代理模式的使用场景:当我们想要在一个已经存在的类上面增加或者修改一些功能时使用。代理对象通常代替原始对象使用,所以代理对象必须要是原始对象相同的接口类型或者是子类型。

    在Java中实现动态代理需要涉及到两个角色proxy class(Proxy.newProxyInstance生成)和handler(用户实现的InvocationHandler)。JDK之所以这样设计,是依据单一职责原则:proxy class仅仅完成代理,handler完成真实行为的修改。从另一方面来看,proxy class在运行时生成,但是handler是在源代码中编码并且进行了编译,运行时生成的东西越少,程序运行速度越快。

    // 所有接口数组中接口方法的调用都会被转发给invocationHandler:
    // 也就是调用h.invoke(this, method, args)
    public static Object newProxyInstance(ClassLoader loader, Class<?>[]interfaces,InvocationHandler h)
      
    class MyInvocationHandler implements InvocationHandler{
        // 在InvocationHandler的实现类中持有原始对象的引用,这是为了通过反射调用原始对象的方法。
      	Object origin = ...
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            // proxy对象很少使用
            return null;
        }
    }
    
  • 相关阅读:
    scan chain的原理和实现——3.Tester Timing
    pattern——serial/paralel
    Scan and ATPG (Tessent)----1.基础概念
    ipdb介绍及Tensor
    pytorch简介
    Python 之map、filter、reduce
    分类器、logistic回归
    机器学习方法、距离度量、K_Means
    动态规划、图
    T分布
  • 原文地址:https://www.cnblogs.com/memo20/p/13139379.html
Copyright © 2020-2023  润新知