• 代理模式


    什么是代理?

      代理就是代替委托方去做一些事情

    代理模式:

      为其他对象提供一种代理以控制对这个对象的访问。

      它的特征是代理类与委托类实现相同的接口,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。简单来说就是,我们访问实际对象时,是通过代理对象来访问的,代理模式就是在访问实际对象时引入一定程度的间接性,因为这种间接性,使我们可以附加多种用途。

      Tips:

        委托类:指的是代理模式中的被代理对象
        代理类:指的是生成的代表委托类的一个角色

    代理分类:

      静态代理:

        指代理类在编译器就创建好了,并生成 .class文件;不是编译器生成的代理类,而是我们手动创建的类。在编译时就已经将接口、本代理类和代理类确定下来。

        软件设计模式中所指的代理一般就是说的静态代理

      动态代理:

        在程序运行时,动态地为被代理对象生成代理类。动态代理是通过反射生成的。

        在Java中java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口就可以生成动态代理对象。JDK提供的代理只能针对接口做代理

    总结:

      静态代理是通过在代码中显式编码定义一个业务实现类的代理类,在代理类中对同名的业务方法进行包装,用户通过代理类调用委托类的业务方法;

      JDK动态代理是通过接口中的方法名,在动态生成的代理类中调用业务实现类的同名方法;

      CGlib动态代理是通过继承业务类,生成的动态代理类是业务类的子类,通过重写业务方法进行代理;

      静态代理在编译时产生class字节码文件,可以直接使用,效率高。动态代理必须实现InvocationHandler接口,通过invoke调用被委托类接口方法是通过反射方式,比较消耗系统性能,但可以减少代理类的数量,使用更灵活。cglib代理无需实现接口,通过生成类字节码实现代理,比反射稍快,不存在性能问题,但cglib会继承目标对象,需要重写方法,所以目标对象不能为final类。

    END.

  • 相关阅读:
    夺命雷公狗TP3.2.3商城11-----后台头部和左侧导航分离
    夺命雷公狗TP3.2.3商城10-----中间层的创建,防止跨目录访问
    3.spring cloud eureka 高可用
    2.spring cloud eureka client配置
    1.spring cloud eureka server配置
    css去掉input记住密码的黄色
    34-THREE.JS 游泳圈
    32-THREE.JS 球体
    31-THREE.JS 正方体
    30-THREE.JS 圆环
  • 原文地址:https://www.cnblogs.com/yangyongjie/p/14296840.html
Copyright © 2020-2023  润新知