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

相关推荐
算.子几秒前
【Spring 实战】Spring AI 进阶专题:Token 成本优化与 Structured Output
java·人工智能·spring
Gopher_HBo6 分钟前
ReentrantReadWriteLock源码讲解
java·后端
农村小镇哥8 分钟前
PHP数据传输流+上传条件+上传步骤
java·开发语言·php
wuxinyan1239 分钟前
Java面试题48:一文深入了解java设计模式
java·设计模式·面试
济源IT小伙一枚13 分钟前
⚡️硬核实战:Spring AI + Ollama 从零搭建私有化多角色 AI 助手|RAG 知识库 + MCP 控制台全实现
java·人工智能·spring
李少兄15 分钟前
Windows 安装 Maven 详细教程(含镜像与本地仓库配置)
java·windows·maven
武超杰17 分钟前
MySQL调优(一)
数据库·mysql
电商API&Tina17 分钟前
淘宝 / 京东关键词搜索 API 接入与实战用途教程|从 0 到 1 搭建电商选品 / 比价 / 爬虫替代系统
java·开发语言·数据库·c++·python·spring
VelinX18 分钟前
【个人学习||spring】
java·学习·spring
YMatrix 官方技术社区18 分钟前
批流一体,从 Lambda 到 Domino|YMatrix 亮相 PGConf.Russia 2026,重构 PostgreSQL 极简实时架构
数据库·postgresql·重构·架构·ymatrix