zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    JAVA与.NET的相互调用——通过Web服务实现相互调用
    WCF大数据量传输配置
    WCF大数据量传输解决方案
    C# #if DEBUG
    我对CSS vertical-align的一些理解与认识(一)
    htmlparser使用例子(全) 转载
    【HtmlParser】HtmlParser使用
    HTMLParser 使用详解
    htmlparser源码简单分析
    利用OpenXml生成Word2007文档
  • 原文地址:https://www.cnblogs.com/attilax/p/6123719.html
Copyright © 2011-2022 走看看