• 动态代理


    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()方法在什么时候被调用!
         在代理对象被创建时?错误的!
         在调用代理对象所实现接口中的方法时?正确的!
     
  • 相关阅读:
    【网络/通信】概念的理解 —— 带宽、吞吐量、净荷
    在线视频教程
    Topological Spaces(拓扑空间)
    Topological Spaces(拓扑空间)
    open ball、closed ball 与 open set、closed set(interior point,limit point)、dense set
    open ball、closed ball 与 open set、closed set(interior point,limit point)、dense set
    python 书籍推荐 三
    python 书籍推荐 二
    python 书籍推荐 一
    2015年你需要了解的15门编程语言
  • 原文地址:https://www.cnblogs.com/beanjk/p/11302810.html
Copyright © 2020-2023  润新知