zoukankan      html  css  js  c++  java
  • 代理模式(Java的动态代理)

    (一)是什么?what?

    ①:定义:

    ②:特征:1.0代理类(中间追求者),与委托类(追求者)有同样的接口

                       2.0代理类--->主要负责为委托类预处理消息、过滤消息、把消息传递给委托类,事后处理消息等。【类似:帮别人追女朋友,打探消息】。

                       3.0代理类与委托类之间通常会有 关联关系 【类似哥们儿】。一个代理类的对象 与 一个委托类的对象关联。代理类本身不真正实现服务,而是通过调用委托类的方法,提供特定服务。【类似于帮追的哥们  是  根据  喜欢那女孩儿的哥们儿  的要求  来做事儿】。

    ③:分类: 1.0 静态代理:在程序运行前,代理的.class文件就已经存在了。

                        2.0动态代理:程序运行时,通过反射机制 动态创建。

    (二)为什么?why?

      优点:①将你要使用的类--->重新生成一个字类或者本类,框架利用新的类做一些事情【可以在方法前后加一些代码,并且不改变底层类

      缺点:①无法摆脱仅支持interface代理的桎梏【因为注定有个共同父类Proxy】

    (三)用在哪儿?where?

    ①:框架中应用较多--->struts,Spring等框架都用到了动态代理。

    (四)怎么做?how?

       (1)动态代理;步骤

                ①:实现InvocationHandler接口--->创建自己的调用处理器  InvacationHandler handler =new InvocationHandlerImpl(....);

               【 2.1:通过Proxy类指定ClassLoader对象和一组interface创建动态代理类

                   3.1:通过反射机制获取动态代理类构造函数,其参数类型是调用处理器接口类型  。-->

                      Constructor constructor=clazz.getConstructor(new Class[]{InvocationHandler.class});

                   4.1:通过 构造函数创建代理类实例 【此时需要将处理器对象作为参数传入】--->

                      Interface proxy=(Interface)constructor.newInstance(new Object[](handler));

                 】

                 ②{   为了简化,ProxynewInstance方法封装了2~4,--->所以只需2步即可完成代理对象的创建。生成的ProxySubject继承Proxy类实现Subject接口,实现的Subject的方法实际调用处理器的invoke方法,而invoke方法利用反射调用的是被代理对象的的方法(Object result=method.invoke(proxied,args))  }    

  • 相关阅读:
    cocos2d-x3.0 PageView
    mysql 安装配置及经常使用操作
    Android自己定义组件系列【6】——进阶实践(3)
    hdu 4300 Clairewd’s message(具体解释,扩展KMP)
    VS"后生成事件" 菜单的使用
    CUDA 实现JPEG图像解码为RGB数据
    Hibernate操作Blob数据
    android清除缓存为什么总是存在12k?
    JSP入门
    Linux字符设备驱动结构(一)--cdev结构体、设备号相关知识机械【转】
  • 原文地址:https://www.cnblogs.com/not-alone/p/8371675.html
Copyright © 2011-2022 走看看