zoukankan      html  css  js  c++  java
  • 代理模式

    一、定义

      代理模式是为其他对象提供一种代理,来控制对这个对象的访问。代理对象在客户端与目标对象之间起到中介作用。数据结构型设计模式。

    二、作用

      1.保护目标对象

      2.增强目标对象

    三、两种代理模式

      静态代理:显示声明被代理对象

      动态代理:可以动态配置和替换被代理对象,使用更为灵活

      区别:

      静态代理编译期间生成代理类(适用性差且难扩展,违背开闭原则),动态代理运行期间生成代理类(实用性好且易扩展);

    四、JDK动态代理生成对象步骤(原理)

      1.通过反射获取到被代理对象的引用,并且获取到它的所有接口

      2.重新生成一个新的类,同时新的类要实现被代理类实现的所有接口

      3.动态生成java代码,并把新加的业务逻辑方法加好

      4.编译新生成的代码.class

      5.再重新加载到JVM中运行,生成的对象就是代理对象

    五、JDK与CGLib(第三方类库)动态代理区别

      1.JDK是通过实现被代理对象接口,CGLib是实现了被代理对象

      2.JDK和CGLib都是在运行期生成字节码,JDK是直接写class字节码,CGLib是使用ASM框架写字节码,CGLib的实现更为复杂,效率低。

      3.JDK调用代理方法是通过反射机制调用,CGLib是通过FastClass机制直接调用,CGLib效率更高

    六、代理模式优点

      代理模式能够将目标对象与代理对象相分离

      一定程度上降低了系统的耦合程度,便于扩展

      保护了目标对象

      增强目标对象的职责

    七、缺点

      造成系统中类的数目增加

      在客户端与目标对象之间增加了一个代理对象,会造成请求处理速度变慢

      增加了系统的复杂度

    八、spring中的aop就是通过代理模式实现,两个重要的实现类是 JdkDynamicAopProxy和CGLibaopProxy,spring中的代理选择原则

      1.当bean有实现接口时,Spring就会用JDK的动态代理,反之~

      2.spring可通过配置强制使用CGLib

      

      

      

  • 相关阅读:
    linux编译C
    Windows下ARP协议的工作原理简介
    窥探QQ基础数据库架构演变史
    JAVA培训—线程同步--卖票问题
    SQLite、MySQL和PostgreSQL 三种关系数据库哪个好?
    再论谭浩强《C语言程序设计》
    JPG加入RAR文件原理详解
    如何区分一个程序员是“老手“还是“新手“?
    AutoITx3.DLL所有函数及说明
    windows索引服务
  • 原文地址:https://www.cnblogs.com/Lena666/p/11759343.html
Copyright © 2011-2022 走看看