文章目录
一、AOP介绍
AOP( 面向切面编程 )是一种思想,它的目的就是在不修改源代码的基础上,对原有功能进行增强。
SpringAOP是对AOP思想的一种实现,Spring底层同时支持jdk和cglib动态代理。
Spring会根据被代理的类是否有接口自动选择代理方式:
- 如果有接口,就采用jdk动态代理
- 如果没接口,就采用cglib的方式
AOP中有一些核心概念:
-
目标对象(Target)
被代理的对象 -
连接点(JoinPoint)
目标对象中得所有方法 -
切入点(PointCut)
目标对象中得要进行功能增强那部分方法 -
增强 (Advice 通知)
一个具体增强功能(增强对象 增强方法) -
切面 (Aspect)
切面是一种描述,描述的是: 哪个增强方法加入到了哪个切点的什么位置
二、使用步骤(日志案例)
1.创建模块,导入依赖
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
<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>
将上面依赖放到pom.xml文件中。
2.创建实体类
3.创建业务层接口和实现类
接口
实现类
4.创建日志类
5.配置切面
6.创建配置类
7.单元测试
三、通知类型
1.四大通知
四大通知描述的就是增强方法在切点方法的什么位置上执行
- 前置通知(before):增强方法在切点运行之前执行
- 返回后通知(after-returning):增强方法在某切点正常完成后执行的通知,不包括抛出异常的情况
- 异常后通知(after-throwing):增强方法在某切点抛出异常退出时执行的通知
- 后置通知(after):增强方法在某切点退出的时候执行的通知(不论是正常返回还是异常退出)
try{
前置通知(before)
//切点执行位置
返回后通知(after-returning)
}catch(Execption e){
异常后通知(after-throwing)
}finally{
后置通知(after)
}
① 添加通知方法
② 测试
2.环绕通知
它是一种特殊的通知,他允许以编码的形式实现四大通知
① 添加通知方法
② 测试
四、切点表达式
切点表达式用于挑选切点
1.execution
execution() :指定一组规则来匹配某些类中的方法,匹配中的就是切点
*代表一个 如果在参数位置代表只有一个参数 如果在包的位置 代表一层包
. . 代表任意
2.@annotation
@annotation:指定一个注解,凡是标有此注解的方法都是切点
① 自定义注解
② 在需要作为切点的方法上添加注解
③ 设置切点表达式
④ 测试
五、记录日志详情
在执行方法时要记录 类名 方法名 参数 返回值 异常信息 方法执行时间