美文网首页
Spring AOP 与 AspectJ

Spring AOP 与 AspectJ

作者: 何德何能者 | 来源:发表于2021-01-26 18:33 被阅读0次

    spring AOP 基于代理(Proxy)的方式实现AOP
    实现的方式是运行时代理
    具体细节可以参考
    JDK动态代理
    Spring AOP基本概念
    切面增强简单流程
    spring 事务

    AspectJ 是eclipse开源的一个面向切面编程项目.
    是基于字节码织入的方式实现AOP, AspectJ提供两种方式的织入

    • 编译时织入, 需要特殊的编译器,并配合AspectJ涉及的语言语法文件针对织入.
    • 类加载时织入, 需要指定jvm代理,并配置aop.xml
      从这两点得知,不能通过编写java代码实现AspectJ的织入,必须要通过特殊编译器或者jvm代理。

    同时spring AOP完全兼容AspectJ的语法,即可以使用AspectJ的注解配置方式声明切面合增强,且通过代理实现AOP。

    总结

    Spring AOP的优势

    • 纯java代码, 且兼容AspectJ的注解
    • 配置简单

    AspectJ的优势

    • 字节码织入,运行时代码执行效率高
    • 被织入对象的方法内调用同对象的方法也会走增强方法。
    • 支持属性, finnal方法的增强。

    Spring AOP的劣势

    • 运行时代理,通过反射调用被代理对象,效率没有代码织入效率好
    • 被代理对象方法内调用同一个对象的方法不会触发增强
    • 只支持方法增强(且方法不能是finnal)

    AspectJ

    • 需要编写非java代码或者通过jvm代理,不能使用单纯的java代码整合到spring中.

    相关文章

      网友评论

          本文标题:Spring AOP 与 AspectJ

          本文链接:https://www.haomeiwen.com/subject/agfnzktx.html