• Atitit 代理CGLIB 动态代理 AspectJ静态代理区别


    Atitit 代理CGLIB 动态代理 AspectJ静态代理区别

     

    1.1. AOP 代理主要分为静态代理和动态代理两大类,静态代理以 AspectJ 为代表;而动态代理则以 spring AOP 为代表 1

    1.2. JDK动态代理是模拟接口实现的方式,cglib是模拟子类继承的方式1

    1.3. CGLIB代理模式的缺点 static和final方法上应用横切关注点也是无法做到的。2

     

     

    1.1. AOP 代理主要分为静态代理和动态代理两大类,静态代理以 AspectJ 为代表;而动态代理则以 spring AOP 为代表

     

    CGLIB动态代理 是可以针对接口与普通类(继承方式),底层使用ASM框架生成字节码完成代理功能 

    我在网上查资料说AspectJ是静态代理 在编译期间就生成了class文件完成了代理。这点容易理解一种编译的技术

     

     

    因为spring支持AspectJ风格的AOP 
    还是动态的,标注中用到的JoinPoint等类都来自aspectj包

     

    1.2. JDK动态代理是模拟接口实现的方式,cglib是模拟子类继承的方式

    JDK动态代理是模拟接口实现的方式,cglib是模拟子类继承的方式,一般采用前者,因为前者效率高。后者不建议使用,除非非用不可

     

    AOPAspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。AOP 实现的关键就在于 AOP 框架自动创建的 AOP 代理,AOP 代理则可分为静态代理和动态代理两大类,其中静态代理是指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;而动态代理则在运行时借助于 JDK 动态代理、CGLIB 等在内存中临时生成 AOP 动态代理类,因此也被称为运行时增强

     

    区别只是生成 AOP 代理类的时机不同:AspectJ 采用编译时生成 AOP 代理类,因此具有更好的性能,但需要使用特定的编译器进行处理;而 Spring AOP 则采用运行时生成 AOP 代理类,因此无需使用特定编译器进行处理。由于 Spring AOP 需要在每次运行时生成 AOP 代理,因此性能略差一些。

     

    1.3. CGLIB代理模式的缺点 static和final方法上应用横切关注点也是无法做到的。

    因为Spring基于代理模式(使用CGLIB),它有一个使用限制,即无法在使用final修饰的bean上应用横切关注点。因为代理需要对Java类进行继承,一旦使用了关键字final,这将是无法做到的。

    例如,在Spring bean MyServicesImpl上使用关键字final,并配置一个“execution(public * *(..))”这样的切入点,将导致运行时异常(exception),因为Spring不能为MyServicesImpl生成代理。

    这种情况下,你也许会考虑使用AspectJ,其支持编译期织入且不需要生成代理。

    于此相似,在static和final方法上应用横切关注点也是无法做到的。因为Spring基于代理模式。如果你在这些方法上配置通知,将导致运行时异常,因为static和final方法是不能被覆盖的。在这种情况下,你也会考虑使用AspectJ,因为其支持编译期织入且不需要生成代理。

     

    AOP日志,记录调用类、方法、方法参数名称、方法参数值(包括对象和基本类型) - paincupid的专栏 - 博客频道 - CSDN.NET.html

     

     

    作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher

    简称 Attilax Akbar 阿提拉克斯 阿克巴

    全名:Attilax bin Mahmud bin  attila bin Solomon Akbar Al Rapanui 

    阿提拉克斯  马哈茂德  阿提拉 所罗门 阿克巴 阿尔 拉帕努伊   

    常用名艾提拉(艾龙)   EMAIL:1466519819@qq.com

    转载请注明来源:attilax的专栏   http://www.cnblogs.com/attilax/

    --Atiend

     

  • 相关阅读:
    WPF,Silverlight与XAML读书笔记第二十四 控件之六 – Items控件之菜单&其它
    WPF,Silverlight与XAML读书笔记第二十八 控件之十 – 媒体控件
    WPF,Silverlight与XAML读书笔记第三十一 可视化效果之布局概览 & 尺寸
    WPF,Silverlight与XAML读书笔记第三十 绘图系统概览
    rabbitmq的发布确认和事务
    Windows Server 2008答疑
    C#获取当前所有进程名
    无法在Web服务器上启动调试。调试失败,因为没有启用集成Windows身份认证
    8088 汇编速查手册
    Access保存图片
  • 原文地址:https://www.cnblogs.com/attilax/p/6123719.html
Copyright © 2020-2023  润新知