前言
本篇介绍什么是spring AOP, AOP的优点,使用场景,spring AOP的组成,简单实现AOP 并 了解它的通知;如有错误,请在评论区指正,让我们一起交流,共同进步!
本文开始
1. 什么是spring AOP?
AOP: 面向切面编程,也就是面向某一类编程,对某一类事情进行统一处理;
spring AOP: 是实现了AOP这种思想的一个框架;
AOP优点:
- 减少重复代码:对一类同样的工作统一处理;
- 提高开发效率:同上;
spring AOP 使用场景
使用:统一用户登录判断; 统一异常处理; 统一日志等等;
认识AOP的组成
- 切面- Aspect:AOP定义的是一个事件;例如:登录操作的整个过程;- 某个具体功能实现的过程 - 一共类;
- 切点 - Pointcut:AOP定义的具体规则;例如:验证登录的 方法;- 实现功能的方法 - 类中的方法定义;
- 连接点 - Join Point:可能触发切点的所有点;- 可能调用功能的某个方法的点;
-
通知 - Advice:AOP具体执行的方法;例如:方法的具体实现;- 代码具体实现 - 类中方法的具体实现;
① 前置通知 @Before
② 后置通知 @After
③ 环绕通知 @Around
④ 异常通知 @AfterThrowing
⑤ 返回通知 @AfterReturning
通知执行的顺序:环绕通知之前 > 前置通知 > 方法 > 方法返回后通知 > 后置通知 > 环绕通知之后
2. 实现spring AOP - 认识各种通知
2.1 在springboot项目中,原有依赖 + 添加spring AOP 依赖
2.2 实现过程 定义切面 + 定义切点 + 定义通知
- 定义切面 -> 定义类
@Aspect // 定义切面
@Component //随框架启动,注入到容器中
public class UserAspect {
//定义切点 + 通知...
}
- 定义切点 -> 定义方法
//定义切点, 对UserController进行拦截
@Pointcut("execution(* com.example.demo.controller.UserController.*(..))")
public void pointcut() {
}//空方法:方法名用于标识
切点表达式:识别该包下类下的任意方法,参数不限;
文章来源:https://www.toymoban.com/news/detail-630936.html
- 定义通知:切点的方法名,写在通知参数中,用于识别是哪个切点的通知;(想了解具体的 百度 - AspectJ 语法)
//前置通知
@Before("pointcut()")
public void doBefore() {
System.out.println("执行前置通知!");
}
//后置通知
@After("pointcut()")
public void doAfter() {
System.out.println("执行后置通知!");
}
//后置返回后的通知
@AfterReturning("pointcut()")
public void doAfterReturn() {
System.out.println("执行返回后通知!");
}//抛出异常后通知
@AfterThrowing("pointcut()")
public void doAfterThrow() {
System.out.println("执行抛异常后的通知!");
}
//环绕通知
//使用环绕通知:例如:统计时间,就可以使用环绕通知,将通知前 与 通知后 放在一起
@Around("pointcut()") //ProceedingJoinPoint:获取连接点;执行 =》返回框架,执行
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("执行环绕通知之前!");
Object result = joinPoint.proceed();
System.out.println("执行环绕通知之后");
return result;
}
总结
✨✨✨各位读友,本篇分享到内容如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!文章来源地址https://www.toymoban.com/news/detail-630936.html
到了这里,关于认识 spring AOP (面向切面编程) - springboot的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!