AOP组成
- 切面 : 切⾯(Aspect)由切点(Pointcut)和通知(Advice)组成,它既包含了横切逻辑的定义,也包括了连接点的定义,切⾯是包含了:通知、切点和切⾯的类,相当于 AOP 实现的某个功能的集合
- 连接点 : 应⽤执⾏过程中能够插⼊切⾯的⼀个点,这个点可以是⽅法调⽤时,抛出异常时,甚⾄修改字段时。切⾯代码可以利⽤这些点插⼊到应⽤的正常流程之中,并添加新的⾏为.
- 切点 : Pointcut 是匹配 Join Point 的谓词,切点相当于保存了众多连接点的⼀个集合(如果把切点看成⼀个表,⽽连接点就是表中⼀条⼀条的数据
- 通知 : 切⾯的⼯作被称之为通知, 实现的这个切面提供什么功能
通知的具体方法类型
- 前置通知: @Before, 通知方法会在目标方法执行之前执行
- 后置通知: @After, 通知⽅法会在⽬标⽅法返回或者抛出异常后调⽤
- 返回之后通知: @AfterReturning, 通知方法会在目标返回后调用
- 抛异常后通知: @AfterThrowing , 通知方法会在抛出异常后调用
- 环绕通知: @Around, 通知包裹了被通知的⽅法,在被通知的⽅法通知之前和调⽤之后执
⾏⾃定义的⾏为
引入Spring AOP依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
定义AOP层
@Aspect // 定义这个类为切面
@Component // 让这个类随着spring项目的启动而注入被自动识别
public class UserAspect {
// 定义切点
@Pointcut("execution(* *com.example.springaoptest1.userController.UserController.*(..))") // 定义切点
public void pc(){};
@Before("pc()")
public void doBefore() {
System.out.println("执行前置通知");
}
@Around("pc()")
public Object doAroud(ProceedingJoinPoint joinPoint) {
System.out.println("环绕通知开始执行");
Object ret;
try {
ret = joinPoint.proceed();
} catch (Throwable e) {
throw new RuntimeException(e);
}
System.out.println("环绕通知执行之后");
return ret;
}
}
UserController
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/getUser")
public String getUser() {
System.out.println("do getUser!");
return "user";
}
@RequestMapping("/delUser")
public String delUser() {
System.out.println("do delUser!");
return "del user";
}
}
Postman测试
AOP工作流程
原文地址:https://blog.csdn.net/niceffking/article/details/134742241
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_20826.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。