系列三十、Spring AOP vs AspectJ AOP

一、关系

(1)当在Spring中要使用@Aspect、@Before、@After等注解时,需要添加AspectJ的相关依赖,如下

XML 复制代码
<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>3.1</version>
</dependency>
<dependency>
    <groupId>aopalliance</groupId>
    <artifactId>aopalliance</artifactId>
    <version>1.0</version>
</dependency>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.19</version>
</dependency>

(2)Spring AOP提供了对AspectJ的支持,但是只用到了AspectJ的切点解析和匹配。@Aspect、@Before、@After等注解都是由AspectJ发明的;

(3)AOP实现的关键在于代理模式,AOP中的代理模式主要分为两种,即动态代理和静态代理。静态代理的代表为AspectJ,动态代理则以Spring的AOP为代表;

二、区别

(1)Spring的AOP使用的是动态代理模式,它基于动态代理实现。默认得,如果使用接口,将会使用JDK的动态代理,如果没有接口将使用CGLIB实现;

(2)AspectJ是静态代理的增强,所谓静态代理,就是AOP框架在编译阶段生成AOP的代理类,因此也称为编译时增强,它会在编译期将切面织入到Java字节码中,运行的时候就是增强之后的AOP对象

相关推荐
我是人✓17 分钟前
Java核心语法:作用域、循环与大数值处理
java·开发语言·后端
Hoxy.R29 分钟前
【金仓数据库产品体验官】KingbaseES V9R2C16 坏块检测与修复完整测试流程
数据库
夜之眷属37 分钟前
PriorityQueue:for-each 遍历和 poll 取出,顺序一样吗?
java·服务器·数据结构·后端·算法
蜗牛互联网1 小时前
Java标准HTTP调用多模态模型的票据抽取前置校验
java·人工智能·python·http
工具派1 小时前
Agent 不是玄学:用 Java 状态机思维理解 LangGraph
java·人工智能·python
十年Java程序媛2 小时前
String / StringBuilder / StringBuffer|别再乱用字符串拼接,底层原理一次讲透
java·spring boot·后端
傲世仙尊2 小时前
类和对象中-构造函数与析构函数把初始化清理自动化
java·运维·自动化
她的男孩2 小时前
权限通了、列表有数,一点分页就炸Forge Admin 用 COUNT(1) 扛住复杂待办
java·spring boot·mybatis
骑着蜗牛撵大象3272 小时前
豆包 Seed 驱动的记账智能体:从拍票抽取到月报生成的全链路落地记录
java·前端·javascript·结构化输出·豆包seed·多模态识别·记账系统