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

相关推荐
伏加特遇上西柚4 小时前
Loki+Alloy+Grafana日志采集部署
java·linux·服务器·spring boot·grafana·prometheus
阿丘Akiu4 小时前
Linux部署我的世界服务器
java
折哥的程序人生 · 物流技术专研4 小时前
《Java面试85题图解版(二)》进阶深化中篇:Spring核心 + 数据库进阶
java·后端·spring·面试
todoitbo4 小时前
WHERE 子句中的函数执行顺序与副作用风险分析
数据库·时序数据库·函数
jiayong234 小时前
MySQL 8.0 Root 用户远程登录配置完整指南
数据库·mysql
数智化管理手记4 小时前
设备总停机?找准根源+TPM核心逻辑,筑牢零故障基础
数据库·人工智能·低代码·制造
SamDeepThinking4 小时前
写代码不考虑前后兼容,迟早要还的
java·后端·程序员
亿牛云爬虫专家5 小时前
深度解析:数据采集场景下的 Java 代理技术实战
java·开发语言·数据采集·动态ip·动态代理·代理配置·连接池复用
zhangshuang-peta5 小时前
MCP + OpenClaw:执行框架如何被“约束成系统”
数据库·人工智能·ai·ai agent·mcp·peta
小小仙。5 小时前
IT自学第四十二天
java·开发语言