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

相关推荐
愤怒的代码6 分钟前
简析 Kotlin 内联函数:与inline相关的关键字
android·java·kotlin
java干货6 分钟前
拒绝应用层循环!用 MySQL 8.0 JSON_TABLE 一键把 JSON 数组“变”成表
数据库·mysql·json
用针戳左手中指指头7 分钟前
Spring源码篇(十三)循环依赖
java·后端·spring·循环依赖·相互依赖
To Be Clean Coder8 分钟前
【Spring源码】getBean源码实战(五)——MergedBean
java·后端·spring
蜗牛~turbo8 分钟前
云星空 应收款账龄分析取数SQL
数据库·sql·金蝶·云星空·k3 cloud
l1t11 分钟前
一个用SQL Sever求解数独的SQL
数据库·sql·sql server·数独·sudoku
SimonKing25 分钟前
局域网内跨平台传文件,没有比LocalSend更方便的了
java·后端·程序员
超级小龙虾25 分钟前
VS Code 本身没有内置像 IntelliJ IDEA 那样的完整书签(Bookmarks)
java
未来之窗软件服务36 分钟前
数据库(四)MySQL 数据表修复——东方仙盟练气
数据库·mysql·仙盟创梦ide·东方仙盟·数据库修复
万物挽挽37 分钟前
单例模式的优点和缺点分别是什么?
java