AOP( 面向切面编程 )是一种思想,它的目的就是在不修改源代码的基础上,对原有功能进行增强。
SpringAOP是对AOP思想的一种实现,Spring底层同时支持jdk和cglib动态代理。
Spring会根据被代理的类是否有接口自动选择代理方式:
- 如果有接口,就采用jdk动态代理
- 如果没接口,就采用cglib的方式
AOP中的核心概念
-
目标对象(Target) 被代理的对象
-
连接点(JoinPoint) 目标对象中得所有方法
-
切入点(PointCut) 目标对象中得要进行功能增强那部分方法
-
增强 (Advice 通知) 一个具体增强功能(增强对象 增强方法)
-
切面 (Aspect) 切面是一种描述,描述的是: 哪个增强方法 加入到了 哪个切点 的 什么位置 增强方法和切点方法的执行顺序
相关依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.6</version>
</dependency>
<!--切点表达式解析坐标-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.7</version>
</dependency>
<!--测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.6</version>
</dependency>
</dependencies>