Spring AOP 与 AspectJ

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中.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容