系列三十、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对象

相关推荐
starzy19902 分钟前
Flink TimeWindow 详解及代码实现:从三种时间语义到滚动与滑动窗口
java·服务器·flink
重生之小比特4 分钟前
【Java SE】类和对象(一)
java·ide·intellij-idea
cc5725026538 分钟前
2026 秋招采购数据分析校招 JD、面试真题与项目准备|2027 届求职复盘
数据库
captain37610 分钟前
网络原理(4)-TCP
java·服务器·网络·网络协议·tcp/ip·java-ee
青山木13 分钟前
枚举类DP进阶:完全平方数与零钱兑换
java·数据结构·算法·leetcode·动态规划
小七在进步16 分钟前
类和对象(二)
java·开发语言
clz131452120 分钟前
风险特征平台架构设计与实现
java·flink
写后端的胖头鱼26 分钟前
【高频面试题】面试题里常出现的Bitmap是什么(附源码和多种场景)
java·开发语言·面试·位图·bitmap
风哥2号2 小时前
数据库教程FGMT28‑Windows‑MySQL5.7‑8.0‑8.4-9.7安装配置
数据库·mysql
benbenAItalk9 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频