zoukankan      html  css  js  c++  java
  • 动态代理

    java代理有jdk动态代理、cglib代理,这里只说下jdk动态代理,jdk动态代理主要使用的是java反射机制(既java.lang.reflect包),动态代理使用前提:必须有接口
     

    1、动态代理的作用(运行时实现指定的接口)

    动态代理就是在运行时生成一个类,这个类会实现你指定的一组接口,而这个类没有.java文件,是在运行时生成的。

    2、动态代理的使用方法

    Class[] cs = {MyInterface.class};
    MyInterface mi = (MyInterface)Proxy.newProxyInstance(loader, cs, h);
    mi是cs的实现类
     
    动态代理:程序运行时,使用JDK提供工具类(Proxy),动态创建一个类,此类一般用于代理。
    代理:你 -- 代理(增强) -- 厂商
    代理类:目标类:被代理的
     
    目标对象:被增强的对象
    代理对象:需要目标对象,然后在目标对象上添加了增强后的对象!
    目标方法:增强的内容
     
    代理对象 = 目标对象 + 增强
     
    Object proxyObj = Proxy.newProxyInstance(参数1,参数2,参数3);
    参数1:ClassLoader,类加载器!把.class文件加载到内存,形成Class对象!当前类.class.getClassLoader();
    参数2:Class[] interfaces ,代理类需要实现的所有接口(确定方法),被代理类实例.getClass().getInterfaces();
    参数3:InvocationHandler, 请求处理类,代理类不具有任何功能,代理类的每一个方法执行时,调用处理类invoke方法。
    代理对象的所有方法(个别不执行,getClass())都会调用InvocationHandler的invoke()方法。
    voke(Object proxy ,Method ,Object[] args)
                      参数1:当前对象,即代理对象!在调用谁的方法!
                      参数2:当前被调用的方法(目标方法)
                      参数3:方法实际参数。
     
     

    3、动态代理的用途

    动态代理的用途与装饰模式很相似,就是为了对某个对象进行增强。所有使用装饰者模式的案例都可以使用动态代理来替换。
     

    4、常见问题

    (1)这个invoke()方法在什么时候被调用!
         在代理对象被创建时?错误的!
         在调用代理对象所实现接口中的方法时?正确的!
     
  • 相关阅读:
    [转]OC与JS的交互详解
    [iOS]数据库第三方框架FMDB详细讲解
    iOS开发-NSOperation与GCD区别
    iOS开发:深入理解GCD 第一篇
    iOS开发之集成ijkplayer视频直播
    iOS--KVO的实现原理与具体应用
    JAVA中Colllection的基本功能
    JAVA中的数组对象
    结对编程《四则运算》
    关于结对编程
  • 原文地址:https://www.cnblogs.com/beanjk/p/11302810.html
Copyright © 2011-2022 走看看