AOP 的两种实现 Spring AOP 和 AspectJ

一、简介

        AOP 是一种思想,面向切面编程,而最流行的 AOP 实现框架分别为 Spring AOP Aspect

二、区别

        Spring AOP 是基于 Spring Ioc 实现的,它解决了大部分常见的需求,但它并不是一个完整的 AOP 解决方案,对应非 Spring 管理的对象,它就没有办法了。而 Aspect 旨在提供完整的 AOP 方案,因此也会更复杂。

2.1 织入方式

        两者织入方式有极大的不同,这也是它们的本质区别,它们实现代理的方式不同。

        AspectJ 是在运行前织入的,分为三种情况:编译时织入、编译后织入、加载时织入。因此需要 AspectJ 编译器的支持。

        而 Spring AOP 是运行时织入的,对于接口使用 JDK Proxy,而继承的使用 CGLIB

2.2 连接点

        因为织入方式的区别,所以两者所支持的连接点也是不同的,像被 final 或者 static 修饰的方法就无法通过动态代理来改变,所以 Spring AOP 无法支持,但是 AspectJ 是直接在运行前织入实际的代码,所以功能会强大很多。

2.3 效率

        编译织入会比较运行时织入快很多,Spring AOP 是使用代理模式在运行时才创建对应的代理类,效率没有 AspectJ 高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐的小三菊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值