美文网首页
静态代理与动态代理

静态代理与动态代理

作者: Shokka | 来源:发表于2018-11-18 21:43 被阅读0次

静态代理不侵入源代码的前提下扩展原功能。但是扩展性差。
静态代理一个代理类只能服务于一个被代理类,并且当被代理类扩展方法是需要修改代理的源码。
而动态代理可以通过一个代理类服务所有代理功能。通过InvocationHandler来关联要代理的真正类,然后将要实现的过滤操作编写于invoke方法中。对于要在什么方法上进行添加操作,在invoke中对method进行匹配即可。相当于AOP中的切点。
由Proxy类生成的代理类位于jvm内存中($Proxy0)

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Hashtable;
import java.util.concurrent.ConcurrentHashMap;

/**
 * Created by Keben on 2018-11-18.
 */
public class MMM {
    public static void main(String[] args) {
        InvocationHandler invocationHandler = new LogHandler<RealObject>(new RealObject());
        Interface proxy = (Interface) Proxy.newProxyInstance(RealObject.class.getClassLoader(),RealObject.class.getInterfaces(),invocationHandler);
        proxy.add("123");
    }
}
interface Interface{
    public abstract void add(String s);
}
class RealObject implements Interface{

    @Override
    public void add(String s){
        System.out.println("I add a string "+s);
    }
}
class LogHandler<T> implements InvocationHandler{
    T target;
    public LogHandler(T target){
        this.target = target;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//        对proxy的调用会导致递归调用invoke最终栈溢出
//        System.out.println("log: Proxy->"+proxy.toString()+" method->"+method.getName());
        Object result = method.invoke(target,args);
        return result;
    }
}

相关文章

  • 编程常用的设计模式

    动态代理和静态代理 静态代理 动态代理 静态代理与动态代理的区别 JDK中的动态代理和CGLIB 实现动态代理的方...

  • JAVA动态代理的实现方式

    1. 静态代理VS动态代理 代理类可以增强被代理对象的方法。可分为静态代理和动态代理。 1.1 静态代理 静态代理...

  • 带你初识Java的代理模式

    Spring AOP是基于动态代理设计模式实现的,相对的就有静态代理 动态代理和静态代理 静态代理 对于静态代理,...

  • Spring之代理模式

    九、代理模式 目录:静态代理、动态代理AOP的底层机制就是动态代理。代理模式分为静态代理和动态代理。接触aop之前...

  • Spring AOP中的动态代理

    Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理: (3)静态代理与动态代理区别...

  • 静态代理、动态代理

    代理分为静态代理和动态代理 按照代理创建的时期,可以分为静态代理和动态代理: (1) 静态代理:由程序员或者...

  • 动态代理

    目录: 1.动态代理与静态代理的使用区别2.动态代理实现原理3.动态代理的使用场景 1.静态代理 代理模式给某一个...

  • 浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP

    文章目录 Java的静态代理 静态代理的优缺点 ABAP的静态代理 Spring AOP的动态代理 JDK动态代理...

  • SpringAOP-jdk动态代理

    静态代理与动态代理 静态代理(如SpringAOP-代理模式中所示)的缺点代理目标的方法越多,代理所委托的方法就越...

  • 静态代理

    静态代理, : //创建代理 总结静态代理: 解决: 可以使用动态代理。

网友评论

      本文标题:静态代理与动态代理

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